为什么这段代码可以在 Visual Studio 2012 上编译并运行?这只是一个错误还是我遗漏了一些东西
namespace SSSS
{
namespace SSS
{
template <class T>
class SS
{
public:
typedef T ValueType;
SS(){std::cout<<T();}
SS(T t) { std::cout<<t;}
};
typedef SS<double> DD;
}
}
int main()
{
SSSS::SSS::DD::SS d;
}
最佳答案
听起来你的编译器正在将 SS
解释为注入(inject)的类名;在这种情况下,它是一种类型,因此声明是有效的。
但是,名称查找规则表明它应该被解释为构造函数,而不是类,因此您的编译器是错误的。其他人拒绝代码:http://ideone.com/7fJ1VM
有效的类型名称可以是类型别名DD
,或者使用注入(inject)类名class DD::SS
的详细类型说明符。
关于c++ - Visual Studio 2012 中的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27524776/