// 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;
}
При составлении приведенного выше кода с лязгом он дает ошибку:с помощью шаблонов классов без прохождения шаблона параметров
error: use of class template B1 requires template arguments
C< B1, A<10, int> > c;
^~
Я понимаю ошибку и исправить ее B1
должны быть B1<char*, A<10, int> >
. Должен ли компилятор вычитать значение этих параметров из наиболее подходящей специализации?
Какой компилятор это? У некоторых проблемы с шаблонами шаблонов. – StoryTeller
clang 3.2 для ubuntu –
'C' требует два типа. Поэтому нет смысла говорить 'C