On upgrading from gcc-4.1.2 to gcc-4.3, this (stripped down) code is
now
rejected:
#include <vector>
#include <iostream>
template<typename T, template <typename Aclass CONT=std::vector>
class Ring {
};
template<typename Cont>
inline std::ostream& operator<<(std::ostream& os, const Ring<Cont>& r)
{
os << '[';
os << ']';
return os;
}
g++ -c test1.cc
test1.cc:11: error: type/value mismatch at argument 2 in template
parameter
list for template<class T, template<class Aclass CONTclass Ring
test1.cc:11: error: expected a template of type template<class A>
class
CONT , got template<class _Tp, class _Allocclass std::vector
What is a reasonable way to fix this? The problem is that the 2nd
parameter
says
template<typename Aclass CONT, which doesn't match std::vector
because it
has an optional 2nd parameter (class _Alloc).
I don't want to only match class CONT with those having a 2nd
parameter
(class _Alloc) - that is too restrictive.