N
ndbecker2
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 A> class CONT=std::vector>
class Ring {
};
template<typename Cont>
inline std:stream& operator<<(std:stream& 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 A> class CONT> class Ring
test1.cc:11: error: expected a template of type template<class A>
class
CONT , got template<class _Tp, class _Alloc> class std::vector
What is a reasonable way to fix this? The problem is that the 2nd
parameter
says
template<typename A> class 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.
now
rejected:
#include <vector>
#include <iostream>
template<typename T, template <typename A> class CONT=std::vector>
class Ring {
};
template<typename Cont>
inline std:stream& operator<<(std:stream& 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 A> class CONT> class Ring
test1.cc:11: error: expected a template of type template<class A>
class
CONT , got template<class _Tp, class _Alloc> class std::vector
What is a reasonable way to fix this? The problem is that the 2nd
parameter
says
template<typename A> class 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.