[v3 PATCH] LWG 2766, LWG 2749

Jonathan Wakely jwakely@redhat.com
Tue Nov 22 13:36:00 GMT 2016


On 17/11/16 23:38 +0200, Ville Voutilainen wrote:
>@@ -478,6 +478,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>     swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
>     noexcept(noexcept(__x.swap(__y)))
>     { __x.swap(__y); }
>+
>+#if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
>+  template<typename _T1, typename _T2>
>+    inline
>+    typename enable_if<__not_<__and_<__is_swappable<_T1>,
>+				     __is_swappable<_T2>>>::value>::type
>+    swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete;

Is there any advantage to using __not_ here, rather than just:

    typename enable_if<!__and_<__is_swappable<_T1>,
                               __is_swappable<_T2>>::value>::type

?

__not_ is useful as a sub-expression of an __and_ / __or_ expression,
but at the top level doesn't seem to buy anything, and is more typing,
and requires indenting the code further.



More information about the Gcc-patches mailing list