我有类似于下面的代码,其中类模板有一个需要初始化的静态变量。然后,我有一个使用私有,内部类作为模板参数模板类的typedef:你如何初始化一个不可访问模板类的静态成员?
template <typename T>
class Foo
{
private:
static const char* s_name;
};
class Bar
{
private:
class Baz
{
// ...
};
typedef Foo<Baz> FooBaz;
};
我以为我可以初始化这样的静态变量:
template<>
const char* Foo<Bar::Baz>::s_name = "foobaz";
和它的作品...在MS Visual Studio的2015年。然而,当我建立铿锵,我得到了一个错误如下所示:
Error 'Baz' is a protected member of 'Bar'
为什么这工作,MSVS,但不铛?有没有办法来初始化这个变量,这两个都可以使用?
简单,使'Baz'公共名称里面'酒吧' – WhiZTiM
GCC也抱怨。我很确定MSVC是错误的,这个代码不应该编译。 –
MSVC在这里是越野车。使用*任何*类名称应该通过*成员访问*支票 – WhiZTiM