max(x, y)
以下の式の呼び出しのオーバーロード解決によりreturn max(max(x, y), z);
、非テンプレート関数が呼び出されるのはなぜchar const* max(char const*, char const*)
ですか?
私が理解できる限り、機能はmax<const char*>(x, y)
前者よりも適合しています。x
const char* const&
y
const 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);
}