Mq-b / Modern-Cpp-templates-tutorial

现代C++模板教程
https://mq-b.github.io/Modern-Cpp-templates-tutorial/
Other
662 stars 88 forks source link

显式指定的模板实参与 ADL #3

Closed frederick-vs-ja closed 8 months ago

frederick-vs-ja commented 10 months ago

C++20 前显式指定模板实参的语法不支持 ADL, C++20 起支持(WG21 P0846R0测试链接)。

namespace fvs {
template<class T>
const T& max(const T& l, const T& r)
{
    return l > r ? l : r;
}

struct S {};
}

int main()
{
    auto p = static_cast<fvs::S*>(nullptr);
    /* unqualified */max<fvs::S*>(p, p); // error until C++20; OK since C++20
}

可能可以增加一些内容探讨这里的兼容问题。

Mq-b commented 10 months ago

目前也就 max 那里稍微提了一下名字查找,因为很经典的冲突,其他过多的概念不想提及。