|
Archives
D Programming
DD.gnu digitalmars.D digitalmars.D.bugs digitalmars.D.dtl digitalmars.D.dwt digitalmars.D.announce digitalmars.D.learn digitalmars.D.debugger C/C++ Programming
c++c++.announce c++.atl c++.beta c++.chat c++.command-line c++.dos c++.dos.16-bits c++.dos.32-bits c++.idde c++.mfc c++.rtl c++.stl c++.stl.hp c++.stl.port c++.stl.sgi c++.stlsoft c++.windows c++.windows.16-bits c++.windows.32-bits c++.wxwindows digitalmars.empire digitalmars.DMDScript electronics |
c++ - Template template support ?
Hi,
Is DMC not supporting template template arguments ?
The following code compiles ok with gcc 4.2 but not with dmc 8.42n.
The error is "no match for function test3(...)".
About the functions :
- test1 takes a vector of ints
- test2 takes a vector of objects T
- test3 take a container C of objects T
Regards,
Cédric
-------------------- sample code ----------------------
#include <iostream>
#include <vector>
#include <list>
using namespace std;
void test1( vector<int>& container ) { cout << "ok" << endl; }
template<class T>
void test2( vector<T>& container ) { cout << "ok" << endl; }
template< template <typename T> class C, class T>
void test3( C<T>& container ) { cout << "ok" << endl; }
int main() {
vector<int> a_vector(5);
list<int> a_list(5);
test1(a_vector); // dmc ok
test2(a_vector); // dmc ok
test3(a_vector); // dmc not ok, gcc ok
test3(a_list); // dmc not ok, gcc ok
return 0;
}
Aug 03 2007
Cédric Paternotte wrote:Is DMC not supporting template template arguments ? Aug 05 2007
Hi Walter,
I've been investigating a bit and found a solution. The previous code compiles
if
test3 is rewritten as :
template< class T, class U, template <typename T,typename U> class C>
void test3( C<T,U>& container ) {
cout << "ok" << endl;
}
Here the container template "C" has been defined as a 2-parameters template,
instead of a 1-parameter template as before.
Indeed, STL container templates take 2 parameters : the value type (which is
mandatory) and the allocator type (which is optional and comes with a default
value).
DMC expected the second parameter (the allocator) to be explicitly specified in
order to recognize "C" as a valid template template.
gcc isn't so rigid in this area but I'm not sure what the standard is saying
about
this (MS VC++ 2003 behaves like dmc).
Chears,
Cédric
Aug 15 2007
|