// -*- C++ -*- //===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef _LIBCPP___TUPLE #define _LIBCPP___TUPLE #include <__config> #include #include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) #pragma GCC system_header #endif _LIBCPP_BEGIN_NAMESPACE_STD template class _LIBCPP_TYPE_VIS_ONLY tuple_size; template class _LIBCPP_TYPE_VIS_ONLY tuple_size : public tuple_size<_Tp> {}; template class _LIBCPP_TYPE_VIS_ONLY tuple_size : public tuple_size<_Tp> {}; template class _LIBCPP_TYPE_VIS_ONLY tuple_size : public tuple_size<_Tp> {}; template class _LIBCPP_TYPE_VIS_ONLY tuple_element; template class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, const _Tp> { public: typedef typename add_const::type>::type type; }; template class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, volatile _Tp> { public: typedef typename add_volatile::type>::type type; }; template class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, const volatile _Tp> { public: typedef typename add_cv::type>::type type; }; template struct __tuple_like : false_type {}; template struct __tuple_like : public __tuple_like<_Tp> {}; template struct __tuple_like : public __tuple_like<_Tp> {}; template struct __tuple_like : public __tuple_like<_Tp> {}; // tuple specializations #if !defined(_LIBCPP_HAS_NO_VARIADICS) template struct __tuple_indices {}; template struct __integer_sequence { template