bccで以下のコメントアウト部分が通らないんですが、特殊化時に戻り値を変えることはできないんでしょうか?
#include <iostream>
struct Hoge{};
struct Foo{
  template <typename T> T print();
};
template <typename T> T Foo::print(){
  std::cout << "print function." << std::endl;return T();
}
//↓ERROR 'print<Hoge>()' は 'Foo' のメンバーではない
//template <> int Foo::print<Hoge>(){
//  std::cout << "print function. parameter is Hoge. return int." << std::endl;
//  return 1;
//}
template <> Hoge Foo::print<Hoge>(){
  std::cout << "print function. parameter is Hoge." << std::endl;
  return Hoge();
}
int main(){
  Foo f;
  f.print<int>();
  f.print<Hoge>();
  return 0;
}

>>751
調べてみます。
ありがとうございます。