diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-04 22:11:41 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-04 22:11:41 +0000 |
| commit | cb08bb04c85c6dcd3d951725505317c31eeff323 (patch) | |
| tree | affc3d589de957aeb81a9ba2d0849e2bddde7861 /include/__tuple | |
| parent | 53a420fba21cf1644972b34dcd811a43cdb8368d (diff) | |
Notes
Diffstat (limited to 'include/__tuple')
| -rw-r--r-- | include/__tuple | 21 |
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; |
