5
votes

I'm trying to specialize a function within a specialization of a class template, but can't figure the right syntax:

template< typename T >
struct Foo {};

template<>
struct Foo< int >
{
  template< typename T >
  void fn();
};

template<> template<>
void Foo< int >::fn< char >() {} // error: too many template-parameter-lists

Here I'm trying to specialize fn for char, which is inside of Foo specialized for int. But the compiler doesn't like what I write. What should be the right syntax then?

1

1 Answers

6
votes

You don't have to say that you're specializing twice.

You're only specializing one function template here

template<> void Foo<int>::fn<char>() {}

Live On Coliru

template< typename T >
struct Foo {};

template<>
struct Foo< int >
{
  template< typename T >
  void fn();
};

template<> void Foo<int>::fn<char>() {}

int main() {
    Foo<int> f;
    f.fn<char>();
}