以下のコードは、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";
}
};
規格に準拠するには?