『プログラミング言語C++』
C.13.6 限定子としてのtemplate
メンバ関数テンプレートにおいて、引数から型を推論できない場合template限定子を使うことになる
だが、template限定子を使うようなことは稀だろう
struct hoge { templateT* get() { return 0; } template void set(T*) {} }; int main() { hoge h; int* p1 = h.get (); // 構文エラー:より小さい演算子のうしろにint int* p2 = h.template get (); // OK // こっちは引数で型推論できるからOK h.set(p1); return 0; }
class hoge { public: template <class T> T* get() { return 0; } template <class T> void set(T*) {} }; template <class Hoge> void foo(Hoge h) { int *p1 = h.get<int>(); // 構文エラー:より小さい演算子のうしろにint int *p2 = h.template get<int>(); // OK // こっちは引数で型推論できるからOK h.set(p1); } int main() { hoge h; foo(h); return 0; }
Visual C++だとtemplate限定子を付けなくてもエラーにならないが
GCCではエラーになるらしい(未確認)