summaryrefslogtreecommitdiff
path: root/include/__tuple
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-01-04 22:11:41 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-01-04 22:11:41 +0000
commitcb08bb04c85c6dcd3d951725505317c31eeff323 (patch)
treeaffc3d589de957aeb81a9ba2d0849e2bddde7861 /include/__tuple
parent53a420fba21cf1644972b34dcd811a43cdb8368d (diff)
Notes
Diffstat (limited to 'include/__tuple')
-rw-r--r--include/__tuple21
1 files changed, 17 insertions, 4 deletions
diff --git a/include/__tuple b/include/__tuple
index 775d7340b54d6..7aad081636627 100644
--- a/include/__tuple
+++ b/include/__tuple
@@ -22,19 +22,32 @@
_LIBCPP_BEGIN_NAMESPACE_STD
-template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_size {};
+template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_size;
+
+struct __empty_tuple_size_base {};
+
+template <class _Tp, class = void>
+struct __tuple_size_base_type {
+ typedef __empty_tuple_size_base type;
+};
+
+template <class _Tp>
+struct __tuple_size_base_type<_Tp, typename __void_t<decltype(tuple_size<_Tp>::value)>::type>
+{
+ typedef integral_constant<size_t, tuple_size<_Tp>::value> type;
+};
template <class _Tp>
class _LIBCPP_TYPE_VIS_ONLY tuple_size<const _Tp>
- : public tuple_size<_Tp> {};
+ : public __tuple_size_base_type<_Tp>::type {};
template <class _Tp>
class _LIBCPP_TYPE_VIS_ONLY tuple_size<volatile _Tp>
- : public tuple_size<_Tp> {};
+ : public __tuple_size_base_type<_Tp>::type {};
template <class _Tp>
class _LIBCPP_TYPE_VIS_ONLY tuple_size<const volatile _Tp>
- : public tuple_size<_Tp> {};
+ : public __tuple_size_base_type<_Tp>::type {};
template <size_t _Ip, class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_element;