У меня есть код, который работает в VC9 (Microsoft Visual С++ 2008 SP1), но не в GCC 4.2 (на Mac):
struct tag {};
template< typename T >
struct C
{
template< typename Tag >
void f( T ); // declaration only
template<>
inline void f< tag >( T ) {} // ERROR: explicit specialization in
}; // non-namespace scope 'structC<T>'
Я понимаю, что GCC хотел бы, чтобы я переместил свою явную специализацию вне класса, но я не могу понять синтаксис. Любые идеи?
// the following is not correct syntax, what is?
template< typename T >
template<>
inline void C< T >::f< tag >( T ) {}