summaryrefslogtreecommitdiffstats
path: root/include/__tuple
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-08-15 01:51:54 +0000
committerEric Fiselier <eric@efcs.ca>2016-08-15 01:51:54 +0000
commitb901c3475e74b98a01494901affd4b72364803c9 (patch)
tree107148b782556d5fd22525dd08a91e932682708d /include/__tuple
parentc9e74ddb6c7ac46d4a00acac268de6b2def1f560 (diff)
downloadexternal_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/__tuple57
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