模板参数阴影如何在VS2005中工作?

时间:2009-01-28 04:44:46

标签: c++ templates gcc visual-studio-2005

在GCC中,这段代码无法编译,因为T被遮蔽了,但是在VS2005中它编译时没有任何警告,那么VS编译器的假设是什么?

template<typename T>
class Foo
{
    template<typename T>
    void Bar(const T& bar)
    {
      ...
    }
};

1 个答案:

答案 0 :(得分:7)

在搜索3个月后找到正确的答案:)它位于标准的14.6.1/4中:

  

模板参数不得在其范围内重新声明(包括嵌套范围)。模板参数的名称不能与模板名称相同。

     

示例:

template<class T, int i> class Y {
    int T;
    // error: template-parameter redeclared
    void f() {
        char T;
        // error: template-parameter redeclared
    }
};

template<class X> class X; // error: template-parameter redeclared

如果Microsoft编译器允许它编译时没有错误甚至是警告,那么它就不符合要求。我不知道是什么可以驱使它在没有呻吟的情况下允许它。您可以尝试高警告级别。