aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorBarrett Adair <barrettellisadair@gmail.com>2017-01-06 15:27:01 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2017-01-06 15:27:01 +0000
commit258ee761eb789d1eb6302c79906d9c0f5b0b3cb0 (patch)
tree76bf231a2169f6f213e5a26c88069d61b7868ca6 /libstdc++-v3
parent1ec62aa9e11eb1f915324634d889e84450b272b1 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--libstdc++-v3/include/std/variant33
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())