diff options
| author | David Chisnall <theraven@FreeBSD.org> | 2012-05-03 16:04:02 +0000 |
|---|---|---|
| committer | David Chisnall <theraven@FreeBSD.org> | 2012-05-03 16:04:02 +0000 |
| commit | 43cd7615798ea22556f20bbd64cff1e0c691e1d0 (patch) | |
| tree | 856ce4e42da23163e4316bca6732710e898f0265 /include/__tuple | |
| parent | acbeab898d6a7f4036c55962a2460aab3e0eda3f (diff) | |
Import a new version of libc++ into the vendor branch.vendor/libc++/r156067
Notes
svn path=/vendor/libc++/dist/; revision=234959
svn path=/vendor/libc++/r156067/; revision=234960; tag=vendor/libc++/r156067
Diffstat (limited to 'include/__tuple')
| -rw-r--r-- | include/__tuple | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/include/__tuple b/include/__tuple index 3b2be1c5a74d..82168048e6ce 100644 --- a/include/__tuple +++ b/include/__tuple @@ -216,7 +216,7 @@ struct __tuple_convertible_imp : public false_type {}; template <class _Tp0, class ..._Tp, class _Up0, class ..._Up> struct __tuple_convertible_imp<true, __tuple_types<_Tp0, _Tp...>, __tuple_types<_Up0, _Up...> > : public integral_constant<bool, - is_constructible<_Up0, _Tp0>::value && + is_convertible<_Tp0, _Up0>::value && __tuple_convertible_imp<true, __tuple_types<_Tp...>, __tuple_types<_Up...> >::value> {}; template <> @@ -235,6 +235,33 @@ struct __tuple_convertible<_Tp, _Up, true, true> typename __make_tuple_types<_Tp>::type, typename __make_tuple_types<_Up>::type> {}; +// __tuple_constructible + +template <bool, class _Tp, class _Up> +struct __tuple_constructible_imp : public false_type {}; + +template <class _Tp0, class ..._Tp, class _Up0, class ..._Up> +struct __tuple_constructible_imp<true, __tuple_types<_Tp0, _Tp...>, __tuple_types<_Up0, _Up...> > + : public integral_constant<bool, + is_constructible<_Up0, _Tp0>::value && + __tuple_constructible_imp<true, __tuple_types<_Tp...>, __tuple_types<_Up...> >::value> {}; + +template <> +struct __tuple_constructible_imp<true, __tuple_types<>, __tuple_types<> > + : public true_type {}; + +template <class _Tp, class _Up, bool = __tuple_like<typename remove_reference<_Tp>::type>::value, + bool = __tuple_like<_Up>::value> +struct __tuple_constructible + : public false_type {}; + +template <class _Tp, class _Up> +struct __tuple_constructible<_Tp, _Up, true, true> + : public __tuple_constructible_imp<tuple_size<typename remove_reference<_Tp>::type>::value == + tuple_size<_Up>::value, + typename __make_tuple_types<_Tp>::type, typename __make_tuple_types<_Up>::type> +{}; + // __tuple_assignable template <bool, class _Tp, class _Up> |
