我有一个问题,我想提供一个函数的通用版本,该版本foo
只能在绝对没有其他匹配的调用时应用。如何修改以下代码,使其与thanlast_resort::foo
更匹配?我想找到一个解决方案,它不涉及修改 的定义 并且保留.derived::type
base::foo
bar
last_resort::foo
#include <iostream>
namespace last_resort
{
template<typename T> void foo(T)
{
std::cout << "last_resort::foo" << std::endl;
}
}
template<typename T> void bar(T)
{
using last_resort::foo;
foo(T());
}
namespace unrelated
{
struct type {};
}
namespace base
{
struct type {};
void foo(type)
{
std::cout << "base::foo" << std::endl;
}
}
namespace derived
{
struct type : base::type {};
}
int main()
{
bar(unrelated::type()); // calls last_resort::foo
bar(base::type()); // calls base::foo
bar(derived::type()); // should call base::foo, but calls last_resort::foo instead
return 0;
}