gnz*_*lbg 4 c++ function-object c++-standard-library c++14
在N3421中 - 使运算符函数更大<>,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));
};
Run Code Online (Sandbox Code Playgroud)
代替
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));
};
Run Code Online (Sandbox Code Playgroud)
noexcept在这个用例中是否遗漏了问题?编辑:链接到github中的工作草稿行.
现有的LWG指南不鼓励使用noexcept.他们不接受宽合约职能,只有窄合约职能.我不记得究竟是如何定义这些术语的,但我可以告诉你,我出席了布里斯托尔会议的讨论noexcept,他们拒绝将其置于一个功能上,因为它是宽合同,我认为这是疯狂的.
由于两个原因之一,它可能不在这里.首先,委员会和论文作者尚未习惯noexcept在每种情况下都考虑- 类似于constexpr.在这种情况下,论文作者(STL)可能只是忘了添加它.
第二个问题是LWG对他们何时接受会有一些疯狂的过度限制noexcept.