c ++因命名空间而无法解释的类“尚未声明”错误

时间:2018-02-13 18:10:13

标签: c++ gcc namespaces

我有一些模板类,它有两个私有静态成员。 用户定义traits结构并将其提供给模板类,然后从模板类派生。

然后在c ++文件中,用户定义静态成员,其中一个成员从另一个成员初始化。  由于某种原因,我得到了一个"类没有被宣布"如果我没有完全指定arg的命名空间,则会出错。这只是我在嵌套命名空间中的一个问题,如果你在一个顶级命名空间中定义类型没有问题,这让我觉得这是一个编译器错误。 修剪下面的示例,使用gcc 7.2进行编译

template<typename Traits>
struct Base 
{
    static int x;
    static int y;
};

namespace foo::bar
{
    struct BarTraits
    {
    };

    using Bar = Base<BarTraits>;

    template<> int Bar::x = 0;
    template<> int Bar::y( Bar::x );  //error 
    //template<> int Bar::y( foo::bar::Bar::x ); //no error
}

0 个答案:

没有答案