#include <iostream>
#include <list>
//
// template class wrapper
//
// accepts a template template parameter
// and a "contained" template parameter
//
template< template< typename AA > class A,
typename B >
struct Wrapper
{
A< B > a_;
voidoperator()() const {
std::cout << "normal" << std::endl;
}
};
//
// partial specialization for Wrappers that
// "contain" int
//
template< template< typename AA > class A >
struct Wrapper< A, int >
{
voidoperator()() const {
std::cout << "special" << std::endl;
}
};
// example class template for custom container
template< typename T > struct List { T t; };
int main()
{
usingnamespace std;
//Wrapper< List, double > f1;
Wrapper< std::list, double > f1;
f1(); // outputs normal
Wrapper< List, int > f2;
f2(); // outputs special
return 0;
}