Синтаксис C ++ для явной специализации шаблонной функции в шаблонном классе?
У меня есть код, который работает в VC9 (Microsoft Visual C ++ 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'
Я понимаю, что GCC хотел бы, чтобы я перенес свою явную специализацию за пределы класса, но я могуне понять синтаксис. Есть идеи?
// the following is not correct syntax, what is?
template< typename T >
template
inline void C< T >::f< tag >( T ) {}