max(x, y)以下の式の呼び出しのオーバーロード解決によりreturn max(max(x, y), z);、非テンプレート関数が呼び出されるのはなぜchar const* max(char const*, char const*)ですか?
私が理解できる限り、機能はmax<const char*>(x, y)前者よりも適合しています。xconst char* const&yconst char* const&
#include <iostream>
template <typename T>
T const& max (T const& x, T const& y)
{
return x < y ? y : x;
}
char const* max (char const* x, char const* y)
{
return std::strcmp(x, y) < 0 ? y : x;
}
template <typename T>
T const& max (T const& x, T const& y, T const& z)
{
return max (max(x, y), z);
}
int main ()
{
const char* sx = "String_x";
const char* sy = "String_y";
const char* sz = "String_z";
max(sx, sy, sz);
}