次のクラスがある場合:
template <typename T1>
class OuterClass
{
template <typename T2>
class InnerClass
{
};
};
を参照しようとするとOuterClass<int>::InnerClass<int>
、GCC は のtemplate
前にキーワードを使用する必要があると文句を言いますInnerClass
が、Visual Studio はキーワードについて文句を言います。もちろん、マクロを使用して問題を回避できますが、少し見苦しく感じます。この状況で正しいのは誰ですか? より良い解決策はありますか?
GCC:
OuterClass<int>::template InnerClass<int>
VS:
OuterClass<int>::InnerClass<int>
解決:
#if defined(_MSC_VER)
#define INNER_TEMPLATE
#else
#define INNER_TEMPLATE template
#endif
OuterClass<int>:: INNER_TEMPLATE InnerClass<int>