diff options
author | Barrett Adair <barrettellisadair@gmail.com> | 2017-01-06 15:27:01 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-01-06 15:27:01 +0000 |
commit | 258ee761eb789d1eb6302c79906d9c0f5b0b3cb0 (patch) | |
tree | 76bf231a2169f6f213e5a26c88069d61b7868ca6 /libstdc++-v3 | |
parent | 1ec62aa9e11eb1f915324634d889e84450b272b1 (diff) | |
download | gcc-258ee761eb789d1eb6302c79906d9c0f5b0b3cb0.zip gcc-258ee761eb789d1eb6302c79906d9c0f5b0b3cb0.tar.gz gcc-258ee761eb789d1eb6302c79906d9c0f5b0b3cb0.tar.bz2 |
Use fold expressions to reduce std::variant instantiation depth
2017-01-06 Barrett Adair <barrettellisadair@gmail.com>
Jonathan Wakely <jwakely@redhat.com>
* include/std/variant (variant, swap): Replace __and_ usage with fold
expressions.
Co-Authored-By: Jonathan Wakely <jwakely@redhat.com>
From-SVN: r244163
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/std/variant | 33 |
2 files changed, 22 insertions, 17 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b172a54..eee7808 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2017-01-06 Barrett Adair <barrettellisadair@gmail.com> + Jonathan Wakely <jwakely@redhat.com> + + * include/std/variant (variant, swap): Replace __and_ usage with fold + expressions. + 2017-01-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR go/78978 diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant index 1803315..3d025a7 100644 --- a/libstdc++-v3/include/std/variant +++ b/libstdc++-v3/include/std/variant @@ -396,7 +396,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } _Variant_base(_Variant_base&& __rhs) - noexcept(__and_<is_nothrow_move_constructible<_Types>...>::value) + noexcept((is_nothrow_move_constructible_v<_Types> && ...)) { if (__rhs._M_valid()) { @@ -459,8 +459,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Variant_base& operator=(_Variant_base&& __rhs) - noexcept(__and_<is_nothrow_move_constructible<_Types>..., - is_nothrow_move_assignable<_Types>...>::value) + noexcept((is_nothrow_move_constructible_v<_Types> && ...) + && (is_nothrow_move_assignable_v<_Types> && ...)) { if (this->_M_index == __rhs._M_index) { @@ -865,8 +865,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __lhs.swap(__rhs); } template<typename... _Types> - enable_if_t<!__and_<is_move_constructible<_Types>..., - is_swappable<_Types>...>::value> + enable_if_t<!((is_move_constructible_v<_Types> && ...) + && (is_swappable_v<_Types> && ...))> swap(variant<_Types...>&, variant<_Types...>&) = delete; class bad_variant_access : public exception @@ -895,13 +895,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION is_default_constructible_v< variant_alternative_t<0, variant<_Types...>>>, variant<_Types...>>, private _Enable_copy_move< - __and_<is_copy_constructible<_Types>...>::value, - __and_<is_copy_constructible<_Types>..., - is_move_constructible<_Types>..., - is_copy_assignable<_Types>...>::value, - __and_<is_move_constructible<_Types>...>::value, - __and_<is_move_constructible<_Types>..., - is_move_assignable<_Types>...>::value, + (is_copy_constructible_v<_Types> && ...), + (is_copy_constructible_v<_Types> && ...) + && (is_move_constructible_v<_Types> && ...) + && (is_copy_assignable_v<_Types> && ...), + (is_move_constructible_v<_Types> && ...), + (is_move_constructible_v<_Types> && ...) + && (is_move_assignable_v<_Types> && ...), variant<_Types...>> { private: @@ -948,8 +948,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION noexcept(is_nothrow_default_constructible_v<__to_type<0>>) = default; variant(const variant&) = default; variant(variant&&) - noexcept(__and_< - is_nothrow_move_constructible<_Types>...>::value) = default; + noexcept((is_nothrow_move_constructible_v<_Types> && ...)) = default; template<typename _Tp, typename = enable_if_t<__exactly_once<__accepted_type<_Tp&&>> @@ -1003,8 +1002,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION variant& operator=(const variant&) = default; variant& operator=(variant&&) - noexcept(__and_<is_nothrow_move_constructible<_Types>..., - is_nothrow_move_assignable<_Types>...>::value) = default; + noexcept((is_nothrow_move_constructible_v<_Types> && ...) + && (is_nothrow_move_assignable_v<_Types> && ...)) = default; template<typename _Tp> enable_if_t<__exactly_once<__accepted_type<_Tp&&>> @@ -1091,7 +1090,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void swap(variant& __rhs) - noexcept(__and_<__is_nothrow_swappable<_Types>...>::value + noexcept((__is_nothrow_swappable<_Types>::value && ...) && is_nothrow_move_constructible_v<variant>) { if (this->index() == __rhs.index()) |