// Build don't link: template <class X> struct A { int fooo (int x); int x; inline int y () { return 3; } inline int z () { return 5; } }; template <class Y> int A<Y>::fooo (int t) { return (this->*(x?&A<Y>::y : &A<Y>::z))() + t; }; // gets bogus error A<int> ai; int frop () { return ai.fooo (100); }