以下代码在MSVC和GCC中均无法编译。对于'typename'关键字的存在,它产生与编译器行为完全相反的行为。 MSVC要求在A :: B
template <class C>
class A
{
template <class D>
class B
{
};
template <class E>
void get(typename A::B<E>& value)
{
}
};
int main(int argc, char *argv[])
{
return 0;
}
不存在'typename'关键字时的MSVC输出:
warning C4346: 'A<C>::?$B@$RCAAB@': dependent name is not a type
note: prefix with 'typename' to indicate a type
error C2061: syntax error: identifier 'B'
存在“ typename”关键字时的GCC输出:
error: 'typename A<C>::B' names 'template<class C> template<class D> class A<C>::B', which is not a type