OP , , , . , , , . . , . , :
template<typename T> int function_template(int);
typedef int function_type(int);
void eats_a_function(function_type&);
std::vector< std::vector > vec0;
std::vector< std::list > vec1;
eats_a_function(function_template);
, vec1 std::list std::vector. ( ) . - .
:
std::vector< std::vector<int> > vec2;
std::vector< std::list<double> > vec3;
eats_a_function(function_template<long>);
, vec2 , .
- , , :
template<template<class> class T> struct indirection {};
template<typename T> struct recursive;
template<typename T = indirection<recursive> > struct recursive {};
, , ( T indirection). , rebind, T.