VS 2008は、他のコンパイラとは少し異なる方法で継承を使用してクラステンプレートを処理しているようです。次のコードは、VS 2008(デフォルトオプションあり)でエラーなしでコンパイルされます。
template <typename S, typename T>
class someclass : public non_existent_class
{
T operator() (S s) const {
return T(s);
}
};
質問は、なぜですか?識別子が定義されていないため、他のコンパイラはこれを実行できませんでした(GCC 4.5.0、Intel、Online Comeau、VS 2005を試してみました)non_existent_class
。多分それはこの振る舞いを正当化する新しいC++0x標準の何かですか?