问题是评论的行'在下面的代码中:
struct MemberType
{
int test;
};
struct MyTag
{
MemberType non_static_m;// Note that it's NOT defined with 'static'.
};
int main(void)
{
typedef decltype(MyTag::non_static_m) TestType_Good;// Well-formed in C++11.
typedef decltype(MyTag::non_static_m.test) TestType_1;// Is it right or wrong?
typedef decltype(MyTag::non_static_m.test + 1) TestType_2;// Is it right or wrong?
return 0;
}
请注意,' MyTag'中的成员是一个非静态字段。 如果列出ISO标准文件中的相关条款,我将不胜感激。
答案 0 :(得分:3)
这是有效的。在未评估的操作数(decltype,sizeof等)中,您可以在任意子表达式中为没有对象表达式的非静态数据名称命名。请注意,这不适用于非静态成员函数,而只适用于数据成员。
答案 1 :(得分:1)
您可以对任何有效的C ++表达式使用 decltype ,因此您的3个语句是正确的(它与静态或非静态修饰符无关)。
标准的第7.1.6.2节说
由decltype(e)表示的类型定义如下:
有关标准参考,请参阅stroustrup FAQ here