使用g ++ 4.6.1编译下一个示例:
#include <iostream>
struct A
{
static const int v = 1;
};
int main()
{
A a;
std::cout << decltype(a)::v << std::endl;
}
将产生下一个编译错误:
error: expected primary-expression before 'decltype'
error: expected ';' before 'decltype'
这是根据标准吗?或者,这是g ++的怪癖吗?
答案 0 :(得分:1)
看起来好像编译器没有识别decltype
关键字。
G ++ 4.6.1足以包含decltype
关键字。您是否使用-std=gnu++0x
或-std=c++0x
启用了C ++ 11模式?
C ++语法允许 decltype-specifier 出现在 qualified-id 中的::
之前,因此代码将被符合标准的编译器接受。错误消息有误,decltype(a)::v
是有效的 qualified-id ,这是 primary-expression 。
作为解决方法,您可以使用typedef。示例:http://ideone.com/clone/7FKUJ
答案 1 :(得分:1)
它是标准的,或者至少它肯定是。我相信有一个关于此的DR,并且它可能已在最终标准中得到修复,但它可能是由于下一个标准中的修复。就像在decltype
之前::
不是有效的语法生成一样简单。