関数テンプレートと多重定義を同時に使う
void print(char *s) { cout << s << '\n'; } template <typename T> void print(T arg) { arg = 0; cout << arg << '\n'; } int main() { print("Hello"); return 0; }
上のようなコードを使うとエラーが起こる。
原因は一行目
void print(char *s)
print()関数呼び出し時に
print("Hello");
と const char * を指定しているため、一行目の関数ではなくtemplate関数が呼び出される。
なので、一行目を
void print(const char *s)
とする。