为什么ADL无法使用using或typedef?

时间:2019-08-23 08:50:33

标签: c++ argument-dependent-lookup

这很好

namespace ns{
struct ObjectId{};
void foo(ObjectId){} 
}

int main()
{
    const auto o = ns::ObjectId{};
    foo(o);
}
ADL通过其参数找到功能foo

namespace ns{
using ObjectId = std::string;
void foo(ObjectId){} 
}

int main()
{
    const auto o = ns::ObjectId{};
    foo(o);
}

收益error: use of undeclared identifier 'foo'; did you mean 'ns::foo'?

typedef也是如此。

有人可以解释为什么会这样,以及如何在不创建无用结构的情况下解决它吗?

0 个答案:

没有答案