我有一些模板类,它有两个私有静态成员。 用户定义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
}