Source Code =========== /* Template based variant */ template class foo { private: int (T::*m)(void *,void *); public: foo(int (T::*method)(void *, void *)); }; template foo::foo(int (T::*method)(void *,void *)) { m=method; }; class bar { public: int x(void *a, void *b) { return 0;} ; }; int main() { #ifdef REF foo f(&(bar::x)); #else foo f(bar::x); #endif } /* Non Template variant */ class bar { public: int x(void *a, void *b) { return 0; }; }; class foo { private: int (bar::*m)(void *,void *); public: foo(int (bar::*method)(void *, void *)); }; foo::foo(int (bar::*method)(void *,void *)) { m=method; } int main() { #ifdef REF foo f(&(bar::x)); #else foo f(bar::x); #endif } Results ======= X denotes that the compiler compiles the source code successfully template non-template noref ref noref ref DEC C++ X vc++ 4.2 X X X X vc++ 5.0 X X SGI CC X X X X g++ (1) X X X X g++ (2) X X g++ (3) X X X X g++ (4) X X X X g++ (5) X X X X g++ (6) X X X X Sun C++ 3 X X X X Sun C++ 4.1 X X X X Sun C++ (acm) X X X X DEC C++ is DEC C++ V5.5-004 on Digital Unix 3.2 (Alpha) cxx [-DREF] g++ (1) is gcc version 2.7.2 on Digital Unix 3.2 (Alpha) g++ [-DREF] g++ (2) is gcc version cygnus-2.7.2-961023 on NT Server 4.0 (Intel) g++ [-DREF] g++ (3) is gcc version 2.7.2 on SunOS 5.5 (Solaris) g++ [-DREF] g++ (4) is gcc version 2.7.2 on SunOS 4.1.4 g++ [-DREF] g++ (5) is gcc version 2.7.0 on Linux 2.0.21 (Intel) g++ [-DREF] g++ (6) is gcc version 2.7.2 on Irix 5.3 (SGI) g++ [-DREF] vc++ 4.2 is MS Visual C++ 4.2 (compiler version 10.20.6166 for 80x86) cl /Tp [/DREF] vc++ 5.0 is MS Visual C++ 5.0 (compiler version 11.00.7022 for 80x86) cl /Tp [/DREF] SGI CC is CC [-DREF] Sun C++ 3 is version 3.0.1 on Solaris CC -V [-DREF] Sun C++ 4.1 is version 4.1 on Solaris CC -V [-DREF] Sun C++ 4.1.