gpt4 book ai didi

c++ - 本地结构中是否允许成员声明 `decltype(name) name;`,其中第一个名称指的是封闭范围?

转载 作者:可可西里 更新时间:2023-11-01 16:06:56 27 4
gpt4 key购买 nike

例子:

int main()
{
int a = 0;
struct X
{
decltype(a) a;
};
return 0;
}

decltype(a)引用了main中的局部a,而它声明的成员同名。

Clang编译没有任何问题,MSVC14 也是如此。

G++提示它,添加 -fpermissive 让它通过

prog.cc:6:21: error: declaration of 'int main()::X::a' [-fpermissive]
decltype(a) a;
^
prog.cc:3:9: error: changes meaning of 'a' from 'int a' [-fpermissive]
int a = 0;

哪种行为符合标准?

最佳答案

我认为这违反了 [basic.scope.class]/1 (N3337):

The following rules describe the scope of names declared in classes.

1) [...]

2) A name N used in a class S shall refer to the same declaration in its context and when re-evaluated in the completed scope of S. No diagnostic is required for a violation of this rule.

由于 decltype(a) 指的是声明成员变量之前封闭作用域中的声明,但是当“在完成的作用域中重新计算”时指的是成员 X ,程序格式错误。不需要诊断,但 GCC 提供了一个(尽管它相当神秘)。所有三个编译器的行为都是有效的。

关于c++ - 本地结构中是否允许成员声明 `decltype(name) name;`,其中第一个名称指的是封闭范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32220551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com