Re: template within templates problem
"Nick Draper" <NickDraper@discussions.microsoft.com> wrote in message
news:9815CFE1-4D53-4CAA-B829-A90F8D1C755E@microsoft.com
I have a problem with getting some C++ code to compile with VC++.
The code compiles fine with GCC, but we also need it to work with
Visual Studio.
This is a cut down sample of the code that generates the same error.
In the .h
class ClassA
{
public:
template<template<typename T> class V,typename T> int
convertToContainer(V<T>&) const;
};
In the .cpp
#include "ClassA.h"
#include <vector>
template<template<typename T> class V,typename T>
int ClassA::convertToContainer(V<T>& CT) const
{
return CT.size();
}
template int ClassA::convertToContainer(std::vector<int>&) const;
This code is invalid. std::vector has two template parameters - element
type, and allocator. The second parameter has a default value. But that
doesn't matter when matching a template to a template template
parameter - the class must have exactly the number of parameters
specified. For more details, see DR150:
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#150
Some compilers allow such a match as an extension, but it's
non-standard.
Personally, I don't quite see the point of using a template template
parameter in this case. Why not just
template <typename V>
int ClassA::convertToContainer(const V& v) const {
typedef typename V::value_type T; // in case you need element type
return v.size();
}
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925