brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · f81048f Raw
100 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef _LIBCPP___TUPLE_SFINAE_HELPERS_H10#define _LIBCPP___TUPLE_SFINAE_HELPERS_H11 12#include <__config>13 14#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)15#  pragma GCC system_header16#endif17 18_LIBCPP_BEGIN_NAMESPACE_STD19 20#ifndef _LIBCPP_CXX03_LANG21 22struct __check_tuple_constructor_fail {23  static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_explicit_default() { return false; }24  static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_implicit_default() { return false; }25  template <class...>26  static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_explicit() {27    return false;28  }29  template <class...>30  static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_implicit() {31    return false;32  }33  template <class...>34  static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_assign() {35    return false;36  }37};38#endif // !defined(_LIBCPP_CXX03_LANG)39 40#if _LIBCPP_STD_VER >= 1741 42template <bool _CanCopy, bool _CanMove>43struct __sfinae_ctor_base {};44template <>45struct __sfinae_ctor_base<false, false> {46  __sfinae_ctor_base()                                     = default;47  __sfinae_ctor_base(__sfinae_ctor_base const&)            = delete;48  __sfinae_ctor_base(__sfinae_ctor_base&&)                 = delete;49  __sfinae_ctor_base& operator=(__sfinae_ctor_base const&) = default;50  __sfinae_ctor_base& operator=(__sfinae_ctor_base&&)      = default;51};52template <>53struct __sfinae_ctor_base<true, false> {54  __sfinae_ctor_base()                                     = default;55  __sfinae_ctor_base(__sfinae_ctor_base const&)            = default;56  __sfinae_ctor_base(__sfinae_ctor_base&&)                 = delete;57  __sfinae_ctor_base& operator=(__sfinae_ctor_base const&) = default;58  __sfinae_ctor_base& operator=(__sfinae_ctor_base&&)      = default;59};60template <>61struct __sfinae_ctor_base<false, true> {62  __sfinae_ctor_base()                                     = default;63  __sfinae_ctor_base(__sfinae_ctor_base const&)            = delete;64  __sfinae_ctor_base(__sfinae_ctor_base&&)                 = default;65  __sfinae_ctor_base& operator=(__sfinae_ctor_base const&) = default;66  __sfinae_ctor_base& operator=(__sfinae_ctor_base&&)      = default;67};68 69template <bool _CanCopy, bool _CanMove>70struct __sfinae_assign_base {};71template <>72struct __sfinae_assign_base<false, false> {73  __sfinae_assign_base()                                       = default;74  __sfinae_assign_base(__sfinae_assign_base const&)            = default;75  __sfinae_assign_base(__sfinae_assign_base&&)                 = default;76  __sfinae_assign_base& operator=(__sfinae_assign_base const&) = delete;77  __sfinae_assign_base& operator=(__sfinae_assign_base&&)      = delete;78};79template <>80struct __sfinae_assign_base<true, false> {81  __sfinae_assign_base()                                       = default;82  __sfinae_assign_base(__sfinae_assign_base const&)            = default;83  __sfinae_assign_base(__sfinae_assign_base&&)                 = default;84  __sfinae_assign_base& operator=(__sfinae_assign_base const&) = default;85  __sfinae_assign_base& operator=(__sfinae_assign_base&&)      = delete;86};87template <>88struct __sfinae_assign_base<false, true> {89  __sfinae_assign_base()                                       = default;90  __sfinae_assign_base(__sfinae_assign_base const&)            = default;91  __sfinae_assign_base(__sfinae_assign_base&&)                 = default;92  __sfinae_assign_base& operator=(__sfinae_assign_base const&) = delete;93  __sfinae_assign_base& operator=(__sfinae_assign_base&&)      = default;94};95#endif // _LIBCPP_STD_VER >= 1796 97_LIBCPP_END_NAMESPACE_STD98 99#endif // _LIBCPP___TUPLE_SFINAE_HELPERS_H100