[英]Constructing a constexpr std::weak_ptr
根據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 ++錯誤,還是constexpr
weak_ptr
只是沒有意義,並且constexpr默認構造函數是錯誤的? 我可以期待這種情況在未來發揮作用嗎?
這是一個libc ++錯誤
沒有。
constexpr
weak_ptr
只是毫無意義
是。
擁有constexpr默認構造函數是一個錯誤?
在非文字類型上使用的constexpr
構造函數允許對靜態和線程存儲持續時間變量進行常量初始化 ,這在任何動態初始化之前發生。
這意味着,例如,始終初始化全局默認構造的weak_ptr
對象,並且可以安全地在全局對象的構造函數中使用。
// TU 1
namespace foo {
std::weak_ptr<int> meow;
}
// TU 2
namespace foo {
extern std::weak_ptr<int> meow;
}
struct C {
C() { /* can safely use foo::meow here */ }
} c;
我可以期待這[
constexpr
weak_ptr
]將來constexpr
嗎?
沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.