コードを考えてみましょう:それは両方のg ++および打ち鳴らすにコンパイルんが、それは他のテンプレートクラス内の可変長引数テンプレートクラスを特化する合法です
#include <iostream>
template <class T>
struct outer {
template <class... Args>
struct inner {
static constexpr bool value = false;
};
template <class... Other>
struct inner<T, Other...> {
static constexpr bool value = true;
};
};
int main() {
std::cout << outer<int>::inner<int, void>::value << std::endl;
};
++が、私はそれが合法であると確信していません。私が知る限り、例えば、クラス自体を明示的に専門化するのではなく、テンプレートクラスのテンプレートメソッドを特化することはできません。内部クラスのルールはどうして違うのですか?
あなたはテンプレートメソッドを特化していません。あなたは部分的に完全なクラスを専門にしています。 –