0

関数テンプレートについて勉強中です。

次のコードを試しました。

template <typename TYPE>
TYPE& Max(TYPE& a, TYPE& b)
{
    return (a > b ? a : b);
}

template < >
char* Max<char*>(char* a, char* b)
{
    return (strcmp(a, b) > 0) ? a : b;
}

template < >
const char* Max<const char*>(const char* a, const char* b)
{
    return (strcmp(a, b) > 0) ? a : b;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    float a = 3.14;
    float b = 2.718;
    float c = Max(a, b);

    char *ca = "abc";
    char *cb = "def";
    char *cmp = Max(ca, cb);    // error (E2015)
}

C++ Builder XE4 で、次のエラーが発生しました。

E2015 Ambiguity between 'char *Ma<>(char *, char *) at Unit1.cpp:43' 
and 'Max<>(char *,char *)at Unit1.cpp:43'

この場合、エラー 2015 を回避するにはどうすればよいですか?

4

1 に答える 1