在GCC中,这个代码不会被编译,因为T被遮蔽,但是在VS2005中它编译没有警告,那么VS编译器的假设是什么?
templateclass Foo { template void Bar(const T& bar) { ... } };
Johannes Sch.. 7
经过3个月的搜索后找到了正确答案:) 14.6.1/4
符合标准:
模板参数不得在其范围内重新声明(包括嵌套范围).模板参数的名称不能与模板名称相同.
例:
templateclass Y { int T; // error: template-parameter redeclared void f() { char T; // error: template-parameter redeclared } }; template class X; // error: template-parameter redeclared
如果Microsoft编译器允许它编译时没有错误甚至是警告,那么它就不符合要求.我不知道是什么可以驱使它在没有呻吟的情况下允许它.您可以尝试高警告级别.
经过3个月的搜索后找到了正确答案:) 14.6.1/4
符合标准:
模板参数不得在其范围内重新声明(包括嵌套范围).模板参数的名称不能与模板名称相同.
例:
templateclass Y { int T; // error: template-parameter redeclared void f() { char T; // error: template-parameter redeclared } }; template class X; // error: template-parameter redeclared
如果Microsoft编译器允许它编译时没有错误甚至是警告,那么它就不符合要求.我不知道是什么可以驱使它在没有呻吟的情况下允许它.您可以尝试高警告级别.