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
このユースケースで問題の省略はありますか?
編集: github の作業ドラフト行へのリンク。
編集 2: libc++ と特殊化へのリンク。