下面的代码不能在 Ideone 或 Codepad 上编译,产生如下错误:
'X' 未在此范围内声明
但在 VC++ 2010 上确实如此:
#include <iostream>
#include <typeinfo>
template<typename T>
struct Base
{
typedef T X;
};
template<typename T>
struct Derived
:
Base<T>
{
static void print()
{
std::cout << typeid(X).name() << "\n";
}
};
int main()
{
Derived<int>::print();
Derived<char>::print();
Derived<float>::print();
return 0;
}
它在哪里打印int
和。我应该将代码更改为:char
float
template<typename T>
struct Derived
{
typedef Base<T> B;
static void print()
{
std::cout << typeid(typename B::X).name() << "\n";
}
};
为了符合标准?