#include void f( int ) { std::cout << "int, "; } void f( void * ) { std::cout << "void *, "; } template< typename T > void f( T ) { std::cout << "T, "; } int main() { int a; void *b; long c; f( a ), f( b ), f( c ); // outputs: int, void *, T }