частичная специализация шаблона

У меня есть сценарий, в котором есть шаблонный класс

template<typename X, typename Y>
class Foo
{
 typedef Y::NestedType Bar;

 int A (Bar thing);
 void B();
 int C(X that);

 // other stuff
};

, и я бы хотел, чтобы метод A () имел другое поведение, когда X является заданным типом (но B и C могут оставаться такими же , а в фактическом коде есть еще около 10 других методов, некоторые из которых довольно длинные и требуют частой настройки ... так что я предпочел бы избегать полной специализации и копировать и вставлять полную реализацию класса)

и написал:

template<typename T>
int Foo<MyType, T>::A(Bar thing);

но мой компилятор (clang 163.7.1) отказался даже рассматривать это как специализацию шаблона любого рода.

Есть ли какая-то синтаксическая ошибка, скрытая в том, как я написал код, или этот стиль кодирования недопустимый C ++? К сожалению, даже если другие компиляторы действительно поддерживают эту идиому, моя компания застряла с clang.

Спасибо за любую помощь в этом.

7
задан Enrico Granata 18 August 2011 в 19:01
поделиться