3

显然,以下代码无法在 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实际上是这里的从属名称?

4

1 回答 1

4

直到有人找到关于此的特定报告(我尝试查找并且我找到的最接近的是this),这确实与 GCC 4.8.0 一起编译。基于这些信息和我之前的怀疑,我想说这只是 GCC 4.7 中的一个错误,已在 4.8 中修复。

于 2013-05-15T23:30:42.797 回答