为什么`static_pointer_cast`不适用于ADL,而是需要显式的`std::`?

考虑

// https://godbolt.org/z/z5M9b9jzx
#include <memory>
#include <cassert>

struct B {};
struct D : B {};

int main() {
    std::shared_ptr<B> b = std::make_shared<D>();
    auto d = static_pointer_cast<D>(b);
    assert(d);
}

我本来希望static_pointer_cast对解析为的不合格调用std::static_pointer_cast,因为b作为std::shared_ptr,应该引入namespace std使用 ADL。

为什么不呢?我需要std::shared_pointer_cast明确地编写以使其工作。

以上是为什么`static_pointer_cast`不适用于ADL,而是需要显式的`std::`?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>