1

考虑以下代码

template<int>
struct outer{
    typedef int outertype;
    template<int=0, int=0> struct inner;
};

template<int o> template<int,int> struct outer<o>::inner{
    void f(outertype){}
};
template<int o> template<int i> struct outer<o>::inner<0,i>{
    //void f(outertype){}   //test.cpp:11:9: error: ‘outertype’ has not been declared
    void f(outer<o>::outertype){}   //ok but more verbose
};

我高度怀疑评论中的错误是一个 g++ 错误(4.8.2),还是名称查找规则中的一个奇怪的微妙之处?

4

0 回答 0