: Understanding partial specialization of inherited nested class templates次のソースコードをからもたらされる継承された入れ子になったテンプレートクラスの特殊
#include <type_traits>
struct Base
{
template<class U, class _ = void> struct Inner: std::true_type {};
template<class _> struct Inner<char, _>: std::false_type {};
};
struct Derived : Base
{
};
template<class _> struct Derived::Inner<int, _>: std::false_type {};
私は継承されたクラスを専門に関する問題を持っていたので、私はGoogleで検索し、上記の質問を見つけます。上記の質問のソースコードはgcc/clangの問題なしにコンパイルされましたが、msvcはコンパイルを拒否し、C2427を発行しました(https://msdn.microsoft.com/en-us/library/10het5hx.aspx参照)。
上記の状況(非テンプレートクラスのネストされたテンプレートクラスを特化する)は、https://msdn.microsoft.com/en-us/library/10het5hx.aspx(テンプレートクラスのネストされた非テンプレートクラスを定義する)とはかなり異なると私は考える。
msvcとgcc/clangのどちらが間違っていますか?それとも、この動作を指定するための標準が非常に不明ですか?
私はMSVCが間違っている願っています...
これはあまりにも悪い...派生クラス名を使ってネストされたクラステンプレートを特化することができれば非常にいいです...とにかく、非常に有益な答えをありがとう!ところで、[9p11]は明示的な特殊化にも適用されますか?この例では、ダミーのパラメータを削除したときにmsvcがまだ拒否しているようです。 –
@JunekeyJeonはい、それは、私が言うことができる限りです。 – bogdan