考虑
// 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
明确地编写以使其工作。