下面的代码是有效的 C++98 还是需要更新版本的 C++ 标准?
namespace basic
{
void f(int) {}
}
namespace lib
{
template<class T1, class T2>
void g(T1 x1, T2 x2)
{
using basic::f; // pull in function f for basic types without ADL
f(x1);
f(x2); // error: no suitable conversion function from "user::c" to "int" exists
}
}
namespace user
{
class c {};
void f(c) {}
}
int main()
{
lib::g(1, user::c());
}
显然,我的编译器(我猜是基于 EDG 前端)在 basic::f 的 using 声明之后不考虑 user::f。根据 C++98,这是正确的行为吗?