在使用不同版本的g ++进行测试时,出现了以下问题
template<class bra>
struct Transform<bra, void> : kernel::Eri::Transform::bra {
static const size_t ni = bra::A::size;
bra::A
被解释为kernel::Eri::Transform::bra::A
,而不是g ++ 4.1.2的模板参数。另一方面,g ++ 4.3做对了。
根据标准,什么应该是正确的行为?
与此同时,我稍微重构以使问题消失。
答案 0 :(得分:4)
对我来说,像gcc 4.1.2是对的。 §14.6.1/ 7(ISO / IEC 14882,C ++ 03):
在类模板的定义中或出现在模板定义之外的此类模板的成员的定义中,对于不依赖于模板参数的每个基类(14.6.2),如果基类的名称或基类成员的名称与template-参数的名称相同,基类名称或成员名称隐藏模板参数名称(3.3.7)。