根据
然而,使用clang尝试编译时会产生一个编译错误,抱怨constexpr变量不能具有非字面类型“
我的问题是,这是libc++的一个bug,还是
std::weak_ptr
文档,可以构造一个 constexpr
的 weak_ptr
:#include <memory>
constexpr weak_ptr<int> foo{};
然而,使用clang尝试编译时会产生一个编译错误,抱怨constexpr变量不能具有非字面类型“
const std::weak_ptr<int>
”,这是因为weak_ptr<int>
有一个用户提供的析构函数(通过查看libc ++头文件可以看到)。我的问题是,这是libc++的一个bug,还是
constexpr
weak_ptr
毫无意义,拥有constexpr默认构造函数是一个错误? 我可以期望将来能够正常工作吗?
weak_ptr
的析构函数负责释放shared_ptr
控制块(也就是weak_ptr
所依附的对象),因此我认为它不能是constexpr
。 - Cheers and hth. - Alf