brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 719edc0 Raw
71 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_TUPLE_SIZE_H10#define _LIBCPP___TUPLE_TUPLE_SIZE_H11 12#include <__config>13#include <__cstddef/size_t.h>14#include <__fwd/tuple.h>15#include <__type_traits/enable_if.h>16#include <__type_traits/integral_constant.h>17#include <__type_traits/is_const.h>18#include <__type_traits/is_volatile.h>19 20#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)21#  pragma GCC system_header22#endif23 24_LIBCPP_BEGIN_NAMESPACE_STD25 26template <class _Tp>27struct tuple_size;28 29#if !defined(_LIBCPP_CXX03_LANG)30template <class _Tp, class...>31using __enable_if_tuple_size_imp _LIBCPP_NODEBUG = _Tp;32 33template <class _Tp>34struct tuple_size<35    __enable_if_tuple_size_imp<const _Tp, __enable_if_t<!is_volatile<_Tp>::value>, decltype(tuple_size<_Tp>::value)>>36    : public integral_constant<size_t, tuple_size<_Tp>::value> {};37 38template <class _Tp>39struct tuple_size<40    __enable_if_tuple_size_imp<volatile _Tp, __enable_if_t<!is_const<_Tp>::value>, decltype(tuple_size<_Tp>::value)>>41    : public integral_constant<size_t, tuple_size<_Tp>::value> {};42 43template <class _Tp>44struct tuple_size<__enable_if_tuple_size_imp<const volatile _Tp, decltype(tuple_size<_Tp>::value)>>45    : public integral_constant<size_t, tuple_size<_Tp>::value> {};46 47#else48template <class _Tp>49struct tuple_size<const _Tp> : public tuple_size<_Tp> {};50template <class _Tp>51struct tuple_size<volatile _Tp> : public tuple_size<_Tp> {};52template <class _Tp>53struct tuple_size<const volatile _Tp> : public tuple_size<_Tp> {};54#endif55 56#ifndef _LIBCPP_CXX03_LANG57 58template <class... _Tp>59struct tuple_size<tuple<_Tp...> > : public integral_constant<size_t, sizeof...(_Tp)> {};60 61#  if _LIBCPP_STD_VER >= 1762template <class _Tp>63inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value;64#  endif65 66#endif // _LIBCPP_CXX03_LANG67 68_LIBCPP_END_NAMESPACE_STD69 70#endif // _LIBCPP___TUPLE_TUPLE_SIZE_H71