関数テンプレートと多重定義を同時に使う

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)

とする。