From: Ville Voutilainen Date: Thu, 20 Oct 2016 11:54:52 +0000 (+0300) Subject: Do the operator= SFINAE in the return type for optional, X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f320e6a09193654596cd347fae835e85b458f94c;p=gcc.git Do the operator= SFINAE in the return type for optional, not in the template parameters. * include/std/optional (operator=(_Up&&)): Move SFINAE from template parameters to the return type. (operator=(const optional<_Up>&)): Likewise. (operator=(optional<_Up>&&)): Likewise. From-SVN: r241372 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f0360c5b8a0..378e9fad145 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2016-10-20 Ville Voutilainen + + Do the operator= SFINAE in the return type for optional, + not in the template parameters. + * include/std/optional (operator=(_Up&&)): Move SFINAE + from template parameters to the return type. + (operator=(const optional<_Up>&)): Likewise. + (operator=(optional<_Up>&&)): Likewise. + 2016-10-20 Jonathan Wakely * include/bits/allocator.h: Remove trailing whitespace, tab-indent. diff --git a/libstdc++-v3/include/std/optional b/libstdc++-v3/include/std/optional index 21210ab6532..f272876fd8b 100644 --- a/libstdc++-v3/include/std/optional +++ b/libstdc++-v3/include/std/optional @@ -568,15 +568,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } - template, decay_t<_Up>>>, - is_constructible<_Tp, _Up>, - __not_<__and_, - is_same<_Tp, decay_t<_Up>>>>, - is_assignable<_Tp&, _Up>>::value, - bool> = true> - optional& + template + enable_if_t<__and_< + __not_, decay_t<_Up>>>, + is_constructible<_Tp, _Up>, + __not_<__and_, + is_same<_Tp, decay_t<_Up>>>>, + is_assignable<_Tp&, _Up>>::value, + optional&> operator=(_Up&& __u) { if (this->_M_is_engaged()) @@ -587,16 +586,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } - template>, - is_constructible<_Tp, const _Up&>, - is_assignable<_Tp&, _Up>, - __not_<__converts_from_optional<_Tp, _Up>>, - __not_<__assigns_from_optional<_Tp, _Up>> - >::value, - bool> = true> - optional& + template + enable_if_t<__and_< + __not_>, + is_constructible<_Tp, const _Up&>, + is_assignable<_Tp&, _Up>, + __not_<__converts_from_optional<_Tp, _Up>>, + __not_<__assigns_from_optional<_Tp, _Up>> + >::value, + optional&> operator=(const optional<_Up>& __u) { if (__u) @@ -613,16 +611,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } - template>, - is_constructible<_Tp, _Up>, - is_assignable<_Tp&, _Up>, - __not_<__converts_from_optional<_Tp, _Up>>, - __not_<__assigns_from_optional<_Tp, _Up>> - >::value, - bool> = true> - optional& + template + enable_if_t<__and_< + __not_>, + is_constructible<_Tp, _Up>, + is_assignable<_Tp&, _Up>, + __not_<__converts_from_optional<_Tp, _Up>>, + __not_<__assigns_from_optional<_Tp, _Up>> + >::value, + optional&> operator=(optional<_Up>&& __u) { if (__u)