// p1: some value
// nt: native type
template<int p1, typename nt>
struct A {};
// pt: pointer to type i.e. int*
// tA: a specialization of A
template<typename pt, typename tA>
struct B1 {};
// pt: pointer to type i.e. int*
// tA: a specialization of A
template<typename pt, typename tA>
struct B2 {};
// tB: specialization of B?
// tA: specialization of A
template<typename tB, typename tA>
struct C {};
// now i want to create a C partial specialization where:
// A<some_value, native_type>
// B?<char*, A<some_value, native_type> >
template< template<typename, typename> class B, int p1, typename nt >
struct C< B<char*, A<p1, nt> >, A<p1, nt> > {};
int main()
{
C< B1, A<10, int> > c;
}
上記のコードを clang でコンパイルすると、次のエラーが発生します。
error: use of class template B1 requires template arguments
C< B1, A<10, int> > c;
^~
エラーを理解しました。修正するにB1
はB1<char*, A<10, int> >
. コンパイラは、これらのパラメーターの値を、最も一致する特殊化から差し引く必要がありますか?