Следующий код:
template <typename S, typename T>
struct foo {
void bar();
};
template <typename T>
void foo <int, T>::bar() {
}
дает ошибку
invalid use of incomplete type 'struct foo<int, T>'
declaration of 'struct foo<int, T>'
(Я использую gcc.) Является ли мой синтаксис для частичной специализации неправильным? Обратите внимание, что если я удалю второй аргумент:
template <typename S>
struct foo {
void bar();
};
template <>
void foo <int>::bar() {
}
то он правильно компилируется.