使用decltype访问静态字段

Accessing static fields by using decltype

本文关键字:字段 静态 访问 decltype 使用      更新时间:2023-10-16

可能重复:
C++0x decltype和作用域解析运算符

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

编译器似乎无法识别decltype关键字。

G++4.6.1足够新,可以包含decltype关键字。您是否使用-std=gnu++0x-std=c++0x启用了C++11模式?

C++语法允许decltype说明符出现在限定id中的::之前,因此代码将被合格的编译器接受。错误消息是错误的,decltype(a)::v是有效的限定id,它是主表达式

作为一种变通方法,您可以使用typedef。示例:http://ideone.com/clone/7FKUJ

它是标准的,或者至少,它肯定是。我相信有一份关于这一点的DR文件,它可能在最终标准中得到了修复,但可能会在下一个标准中得到修复。很简单,decltype::之前不是有效的语法产物。