English 中文(简体)
在VS2005中,模板参数遮蔽是如何工作的?
原标题:
  • 时间:2009-01-28 04:44:45
  •  标签:

在GCC中,此代码将无法编译,因为T被遮盖了,但在VS2005中,它可以编译而不会出现警告,那么VS编译器正在做什么样的假设?

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

在寻找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编译器不出现错误或警告即可编译通过,则不符合规范。我不知道是什么原因让它能够默默批准。您可以尝试提高警告级别。

问题回答

暂无回答




相关问题
热门标签