Код (Text): template <class T> struct foo { template <class U> U boo(); }; template <class T> template <> int foo<T>::boo<int>() { return 0; } int main() { foo<char> f; int i = f.boo<int>(); return 0; } Код (Text): "ComeauTest.c", line 9: error: a template declaration containing a template parameter list may not be followed by an explicit specialization declaration template <> ^ 1 error detected in the compilation of "ComeauTest.c". Почему так, и существует ли обходной маневр?
Сам спросил - сам ответил (часть 2) Код (Text): template <class T> struct foo { template <class U> U boo(); void boo(int& val); void boo(char& val); }; template <class T> template <class U> U foo<T>::boo() { U u = U(); boo(u); return u; } template <class T> void foo<T>::boo(int& val) { val = 1; } template <class T> void foo<T>::boo(char& val) { val = 'a'; } int main() { foo<char> f; int i = f.boo<int>(); char c = f.boo<char>(); return 0; } Остается неясным, почему нельзя делать как в первом примере. nop_, заквотишь Стандарт?