使用decltype访问静态字段

时间:2012-01-28 20:38:16

标签: c++ g++ c++11 decltype

  

可能重复:
  C++0x decltype and the scope resolution operator

使用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 ++的怪癖吗?

2 个答案:

答案 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之前::不是有效的语法生成一样简单。