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
This commit is contained in:
parent
1ec62aa9e1
commit
258ee761eb
2 changed files with 22 additions and 17 deletions
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
|
|
Loading…
Add table
Reference in a new issue