![](/img/trans.png)
[英]Why std::declval<int>() = std::declval<int>() is invalid?
[英]Why is std::declval not constexpr?
如題 - 為什么這樣的代碼在 cpp 中是非法的?
static_assert(std::declval<std::array<int, 4>>().size() == 4);
它是標准的忽視還是有一些更深層次的理由為什么std::declval
不是constexpr
?
這一行:
static_assert(std::declval<std::array<int, 4>>().size() == 4);
無法編譯,因為您在評估的上下文中使用declval
。 這是不允許的,如果你這樣做,你的程序是錯誤的。 declval
只能在未評估的上下文中調用,例如在decltype
或sizeof
中。
制作 function constexpr
意味着它可以在運行時或編譯時調用。 由於declval
根本無法被調用,因此將其constexpr
毫無意義。 我想將其設為constexpr
不會有任何危害,但無論哪種方式,都沒關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.