diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-08-15 01:51:54 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-08-15 01:51:54 +0000 |
commit | b901c3475e74b98a01494901affd4b72364803c9 (patch) | |
tree | 107148b782556d5fd22525dd08a91e932682708d /include/__tuple | |
parent | c9e74ddb6c7ac46d4a00acac268de6b2def1f560 (diff) | |
download | external_libcxx-b901c3475e74b98a01494901affd4b72364803c9.tar.gz external_libcxx-b901c3475e74b98a01494901affd4b72364803c9.tar.bz2 external_libcxx-b901c3475e74b98a01494901affd4b72364803c9.zip |
Check in SFINAE base class for use in optional/variant
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@278643 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/__tuple')
-rw-r--r-- | include/__tuple | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/include/__tuple b/include/__tuple index 3cafbdeab..6d978a2dc 100644 --- a/include/__tuple +++ b/include/__tuple @@ -479,6 +479,63 @@ struct _LIBCPP_TYPE_VIS __check_tuple_constructor_fail { }; #endif +#if _LIBCPP_STD_VER > 14 + +template <bool _CanCopy, bool _CanMove> +struct __sfinae_ctor_base {}; +template <> +struct __sfinae_ctor_base<false, false> { + __sfinae_ctor_base() = default; + __sfinae_ctor_base(__sfinae_ctor_base const&) = delete; + __sfinae_ctor_base(__sfinae_ctor_base &&) = delete; + __sfinae_ctor_base& operator=(__sfinae_ctor_base const&) = default; + __sfinae_ctor_base& operator=(__sfinae_ctor_base&&) = default; +}; +template <> +struct __sfinae_ctor_base<true, false> { + __sfinae_ctor_base() = default; + __sfinae_ctor_base(__sfinae_ctor_base const&) = default; + __sfinae_ctor_base(__sfinae_ctor_base &&) = delete; + __sfinae_ctor_base& operator=(__sfinae_ctor_base const&) = default; + __sfinae_ctor_base& operator=(__sfinae_ctor_base&&) = default; +}; +template <> +struct __sfinae_ctor_base<false, true> { + __sfinae_ctor_base() = default; + __sfinae_ctor_base(__sfinae_ctor_base const&) = delete; + __sfinae_ctor_base(__sfinae_ctor_base &&) = default; + __sfinae_ctor_base& operator=(__sfinae_ctor_base const&) = default; + __sfinae_ctor_base& operator=(__sfinae_ctor_base&&) = default; +}; + +template <bool _CanCopy, bool _CanMove> +struct __sfinae_assign_base {}; +template <> +struct __sfinae_assign_base<false, false> { + __sfinae_assign_base() = default; + __sfinae_assign_base(__sfinae_assign_base const&) = default; + __sfinae_assign_base(__sfinae_assign_base &&) = default; + __sfinae_assign_base& operator=(__sfinae_assign_base const&) = delete; + __sfinae_assign_base& operator=(__sfinae_assign_base&&) = delete; +}; +template <> +struct __sfinae_assign_base<true, false> { + __sfinae_assign_base() = default; + __sfinae_assign_base(__sfinae_assign_base const&) = default; + __sfinae_assign_base(__sfinae_assign_base &&) = default; + __sfinae_assign_base& operator=(__sfinae_assign_base const&) = default; + __sfinae_assign_base& operator=(__sfinae_assign_base&&) = delete; +}; +template <> +struct __sfinae_assign_base<false, true> { + __sfinae_assign_base() = default; + __sfinae_assign_base(__sfinae_assign_base const&) = default; + __sfinae_assign_base(__sfinae_assign_base &&) = default; + __sfinae_assign_base& operator=(__sfinae_assign_base const&) = delete; + __sfinae_assign_base& operator=(__sfinae_assign_base&&) = default; +}; +#endif // _LIBCPP_STD_VER > 14 + _LIBCPP_END_NAMESPACE_STD #endif // _LIBCPP___TUPLE |