gpt4 book ai didi

c++ - 为什么 N3421 不提供 noexcept 限定词?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:26 28 4
gpt4 key购买 nike

N3421 - Making Operator Functors greater<> , std 函数对象的新特化是:

template <> struct plus<void> {
template <class T, class U> auto operator()(T&& t, U&& u) const
-> decltype(std::forward<T>(t) + std::forward<U>(u));
};

代替

template <> struct plus<void> {
template <class T, class U> auto operator()(T&& t, U&& u) const
noexcept(noexcept(decltype(std::forward<T>(t) + std::forward<U>(u))
(std::move(std::forward<T>(t) + std::forward<U>(u)))))
-> decltype(std::forward<T>(t) + std::forward<U>(u));
};
  • 这是有原因的吗?
  • 在这个用例中省略 noexcept 是否重要?

编辑:link to the working draft line in github .

编辑 2:link to libc++ plus specialization .

最佳答案

现有的 LWG 指南不鼓励使用 noexcept。他们不接受 noexcept 宽契约(Contract)功能,只接受窄契约(Contract)功能。我不记得这些术语是如何定义的,但我可以告诉你,我出席了讨论 noexcept 的布里斯托尔 session ,他们拒绝将它放在一个函数中,因为它是广泛的契约(Contract),我认为这太疯狂了。

因此,由于两个原因之一,它可能不在此处。首先是委员会和论文作者还不习惯在所有情况下都考虑noexcept——类似于constexpr。在这种情况下,论文作者 (STL) 可能只是忘记添加它。

第二个是 LWG 对于何时接受 noexcept 有一些疯狂的过度限制。

关于c++ - 为什么 N3421 不提供 noexcept 限定词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752446/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com