struct foo { typedef int (*fun)(int); static int f(int); // overload between static & non-static int f(); static int g(int); // non-overloaded static }; template struct f_obj { // something .. }; int foo::f() { f_obj f1; f_obj f2; return 0; }