视觉工作室2012中的奇怪错误

时间:2014-12-17 11:41:05

标签: c++ visual-studio templates visual-studio-2012

为什么这段代码会在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;
    }

1 个答案:

答案 0 :(得分:4)

听起来你的编译器正在将SS解释为注入的类名;在这种情况下,它是一个类型,因此声明是有效的。

但是,名称查找规则说它应该被解释为构造函数而不是类,因此编译器是错误的。其他人拒绝代码:http://ideone.com/7fJ1VM

有效的类型名称将是别名DD,或使用注入的类名class DD::SS的详细类型说明符。