【发布时间】:2012-02-21 08:01:24
【问题描述】:
使用 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++ 的怪癖?
【问题讨论】:
-
如果您输入了
A::v,它还可以让您免于输入更多内容:D -
@Mr.Anubis:如果是
std::map<this_long_type_name, that_long_template<other_type_name>> m; auto a = m.begin();....那么写typename而不是decltype(a)会省钱吗? -
@BenVoigt 不是真正的骗子,我不喜欢这个问题的答案。我的问题的答案就在那个问题中
-
@VJovic:除了他的类被命名为
Foo而不是A,静态成员是i而不是v之外,没有任何区别。 litb 提供了第二种解决方法,std::identity。而“我的问题的答案就在那个问题中”也是被骗的理由。