显然,以下代码无法在 gcc 4.7 上编译:
#include <vector>
struct foo {
std::vector<int> x;
template<typename T>
void bar(T) {
decltype(x)::value_type y;
}
};
int main() {
foo f;
f.bar(0);
}
编译错误如下:
test.cpp:8:9: error: need ‘typename’ before ‘decltype (((foo*)this)->foo::x)::value_type’ because ‘decltype (((foo*)this)->foo::x)’ is a dependent scope
我知道问题的解决方案,但为什么不编译?这里不是一个依赖名称,那么如果编译器已经可以自己弄清楚,x
为什么我需要明确指出它是一个类型呢?decltype(x)::value_type
还是我错了,x
实际上是这里的从属名称?