函数模板中的decltype和scope resolution运算符

时间:2013-05-15 23:00:49

标签: c++ templates c++11 decltype

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

1 个答案:

答案 0 :(得分:4)

在有人找到关于此的具体报告之前(我试过看,我发现的最接近的是this),这是does compile with GCC 4.8.0。根据这些信息和我之前的怀疑,我会说这只是GCC 4.7中的一个错误,修正了4.8。