file tp.cpp:
template<template<typename> class>
class B { };
template<typename>
class C : public B<C> {
C() : B<C>() { } // line 6
};
$ g++ -c tp.cpp
tp.cpp: In constructor 'C< <template-parameter-1-1> >::C()':
tp.cpp:6: error: type/value mismatch at argument 1 in template
parameter list for 'template<template<class>
class<template-parameter-1-1> > class B'
tp.cpp:6: error: expected a class template, got 'C<
<template-parameter-1-1> >'
Thanks
Suresh
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
As a side note VC8 accepts C() : B<C>() w/o complain.
HTH
Radu
The compiler is correct. Did you mean to use one of the following
constructs instead?
template<typename>
class B { };
template<template<typename> class T = B>
class C : public T<C<T> >
{
C() : T<C<T> >() {}
};
template<typename T>
class A : public B<A<T> >
{
A() : B<A<T> >() {}
};
Marius
A work-around for this problem:
template<template<typename> class>
class B { };
template<typename>
class C;
typedef B<C> T;
template<typename>
class C : public T {
C() : T() { } // line 6
};
Sounds like a bug to me.
Suresh