#ifndef _LIBCPP___TUPLE_SFINAE_HELPERS_H
#define _LIBCPP___TUPLE_SFINAE_HELPERS_H
#include <__config>
#include <__fwd/tuple.h>
#include <__tuple/make_tuple_types.h>
#include <__tuple/tuple_element.h>
#include <__tuple/tuple_like_ext.h>
#include <__tuple/tuple_size.h>
#include <__tuple/tuple_types.h>
#include <__type_traits/conjunction.h>
#include <__type_traits/enable_if.h>
#include <__type_traits/integral_constant.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_same.h>
#include <__type_traits/remove_cvref.h>
#include <__type_traits/remove_reference.h>
#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
#ifndef _LIBCPP_CXX03_LANG
struct __tuple_sfinae_base { … };
template <class _Tp,
class _Up,
bool = __tuple_like_ext<__libcpp_remove_reference_t<_Tp> >::value,
bool = __tuple_like_ext<_Up>::value>
struct __tuple_constructible : public false_type { … };
__tuple_constructible<_Tp, _Up, true, true>;
tuple_element<_Ip, tuple<_Tp...>>;
struct _LIBCPP_EXPORTED_FROM_ABI __check_tuple_constructor_fail { … };
#endif
#if _LIBCPP_STD_VER >= 17
template <bool _CanCopy, bool _CanMove>
struct __sfinae_ctor_base { … };
template <>
struct __sfinae_ctor_base<false, false> { … };
template <>
struct __sfinae_ctor_base<true, false> { … };
template <>
struct __sfinae_ctor_base<false, true> { … };
template <bool _CanCopy, bool _CanMove>
struct __sfinae_assign_base { … };
template <>
struct __sfinae_assign_base<false, false> { … };
template <>
struct __sfinae_assign_base<true, false> { … };
template <>
struct __sfinae_assign_base<false, true> { … };
#endif
_LIBCPP_END_NAMESPACE_STD
#endif