为什么这段代码会在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;
}
答案 0 :(得分:4)
听起来你的编译器正在将SS
解释为注入的类名;在这种情况下,它是一个类型,因此声明是有效的。
但是,名称查找规则说它应该被解释为构造函数而不是类,因此编译器是错误的。其他人拒绝代码:http://ideone.com/7fJ1VM
有效的类型名称将是别名DD
,或使用注入的类名class DD::SS
的详细类型说明符。