1234353Sdim//===----------------------------------------------------------------------===// 2198090Srdivacky// 3198090Srdivacky// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4198090Srdivacky// See https://llvm.org/LICENSE.txt for license information. 5198090Srdivacky// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6198090Srdivacky// 7198090Srdivacky//===----------------------------------------------------------------------===// 8198090Srdivacky 9198090Srdivacky#ifndef _LIBCPP___TUPLE_TUPLE_LIKE_H 10198090Srdivacky#define _LIBCPP___TUPLE_TUPLE_LIKE_H 11198090Srdivacky 12198090Srdivacky#include <__config> 13198090Srdivacky#include <__fwd/array.h> 14198090Srdivacky#include <__fwd/pair.h> 15198090Srdivacky#include <__fwd/subrange.h> 16198090Srdivacky#include <__fwd/tuple.h> 17198090Srdivacky#include <__type_traits/integral_constant.h> 18198090Srdivacky#include <__type_traits/remove_cvref.h> 19198090Srdivacky#include <cstddef> 20224145Sdim 21224145Sdim#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 22224145Sdim# pragma GCC system_header 23198090Srdivacky#endif 24198090Srdivacky 25198090Srdivacky_LIBCPP_BEGIN_NAMESPACE_STD 26198090Srdivacky 27198090Srdivacky#if _LIBCPP_STD_VER >= 20 28198090Srdivacky 29198090Srdivackytemplate <class _Tp> 30198090Srdivackystruct __tuple_like_impl : false_type {}; 31198090Srdivacky 32198090Srdivackytemplate <class... _Tp> 33198090Srdivackystruct __tuple_like_impl<tuple<_Tp...> > : true_type {}; 34198090Srdivacky 35198090Srdivackytemplate <class _T1, class _T2> 36218893Sdimstruct __tuple_like_impl<pair<_T1, _T2> > : true_type {}; 37218893Sdim 38234353Sdimtemplate <class _Tp, size_t _Size> 39218893Sdimstruct __tuple_like_impl<array<_Tp, _Size> > : true_type {}; 40218893Sdim 41218893Sdimtemplate <class _Ip, class _Sp, ranges::subrange_kind _Kp> 42218893Sdimstruct __tuple_like_impl<ranges::subrange<_Ip, _Sp, _Kp> > : true_type {}; 43218893Sdim 44218893Sdimtemplate <class _Tp> 45218893Sdimconcept __tuple_like = __tuple_like_impl<remove_cvref_t<_Tp>>::value; 46234353Sdim 47234353Sdim#endif // _LIBCPP_STD_VER >= 20 48218893Sdim 49218893Sdim_LIBCPP_END_NAMESPACE_STD 50218893Sdim 51218893Sdim#endif // _LIBCPP___TUPLE_TUPLE_LIKE_H 52218893Sdim