为什么"types may not be defined in parameter types"

Why "types may not be defined in parameter types"

本文关键字:types in parameter defined not may 为什么 be      更新时间:2023-10-16

在C++20中,我们被允许使用命名的初始值设定项(https://en.cppreference.com/w/cpp/language/aggregate_initialization#Designated_initializers(。该 tl;博士;是你可以有命名的结构初始值设定项,例如

struct Args {
int a = 20;
string b = "b";
Foo* const foo; // must be defined
};
void Bar(Args x);
Bar({.b="woot", .foo=&f})

更简洁的语法(如果通过一个间接级别,似乎会自动提供命名参数的语法(是:

void Bar(struct{int a=20; string b="b"; Foo* const foo;}) {/*...*/}

"参数列表中的类型定义"指出它是不允许的,但我想知道为什么不允许它。是否有一些有趣的 c++ 解析/链接问题会被这种类型的声明打破?也许它需要限制为 POD 类型或其他东西?

将注释编译成答案(尽管引用的答案会更有用(:

编译器很难确定函数的两个不同声明是否相同。从技术上讲,每个函数声明都会声明自己的匿名类型。任何让它看起来像"相同"类型的技巧都需要大量的类型重整,并且无论如何都需要将类型命名为"引擎盖下"。