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-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef _LIBCPP___TYPE_TRAITS_TYPE_LIST_H 10#define _LIBCPP___TYPE_TRAITS_TYPE_LIST_H 11 12#include <__config> 13#include <cstddef> 14 15#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 16# pragma GCC system_header 17#endif 18 19_LIBCPP_BEGIN_NAMESPACE_STD 20 21template <class _Hp, class _Tp> 22struct __type_list 23{ 24 typedef _Hp _Head; 25 typedef _Tp _Tail; 26}; 27 28template <class _TypeList, size_t _Size, bool = _Size <= sizeof(typename _TypeList::_Head)> struct __find_first; 29 30template <class _Hp, class _Tp, size_t _Size> 31struct __find_first<__type_list<_Hp, _Tp>, _Size, true> 32{ 33 typedef _LIBCPP_NODEBUG _Hp type; 34}; 35 36template <class _Hp, class _Tp, size_t _Size> 37struct __find_first<__type_list<_Hp, _Tp>, _Size, false> 38{ 39 typedef _LIBCPP_NODEBUG typename __find_first<_Tp, _Size>::type type; 40}; 41 42_LIBCPP_END_NAMESPACE_STD 43 44#endif // _LIBCPP___TYPE_TRAITS_TYPE_LIST_H 45