Keywords 'class' and 'typename' not interchangeable with template template parameters?
Hello everybody!
I just stumbled into the miraculous world of template template parameters
and wrote a short piece of testing code to play around with this rather new
C++ feature:
#include <list>
#include <vector>
template<template <typename, typename> class Cont, typename T>
class MyClass
{
Cont<T, std::allocator<T>> m_cont;
public:
void Add( const T& x )
{ m_cont.push_back( x ); }
};
int main()
{
MyClass<std::list, int> obj1;
MyClass<std::vector, int> obj2;
obj1.Add( 0 );
obj2.Add( 1 );
return 0;
}
I was glad to learn that despite warnings about compatibility issues, Visual
C++ 2005 Express Edition seems to offer full support for template template
parameters. The only thing that struck me, and this brings us to my
question, is the use of the 'class' keyword in the declaration of 'MyClass':
template<template <typename, typename> class Cont, typename T>
class MyClass { ... };
I adopted this syntax from the code examples I found on the internet, but I
thought that the keywords 'class' and 'typenames' were perfectly
interchangeable with regards to templates, and that preference of one
towards the other was just a question of style? However, my code does not
compile any more when I replace the keyword 'class' with 'typename':
template<template <typename, typename> typename Cont, typename T>
class MyClass { ... };
Is this an issue with my compiler, or does the standard in fact require the
'class' keyword when it comes to template template parameters? This would
surprise me, as in my example, the 'typename' keyword is used to define the
parameters of 'Cont'. So what about interchangeability of the 'class' and
'typename' keywords now?
--
Matthias Hofmann
Anvil-Soft, CEO
http://www.anvil-soft.com - The Creators of Toilet Tycoon
http://www.anvil-soft.de - Die Macher des Klomanagers
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]