diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2010-08-18 18:52:04 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2010-08-18 18:52:04 +0000 |
| commit | 5e2f7b89e94e63ea026993a6df6b75914a9ea3d4 (patch) | |
| tree | d89424f0ae4846b6644e5c4663e18e1662772a59 /libcxx/include | |
| parent | eaacbc9da6212b03c454065bfd1d2fc2a510810a (diff) | |
| download | bcm5719-llvm-5e2f7b89e94e63ea026993a6df6b75914a9ea3d4.tar.gz bcm5719-llvm-5e2f7b89e94e63ea026993a6df6b75914a9ea3d4.zip | |
Updated by-chapter chart with weekly test results. Also did some prototyping on result_of, but if-def'd out the prototyped part (which the LWG may or may not accept)
llvm-svn: 111389
Diffstat (limited to 'libcxx/include')
| -rw-r--r-- | libcxx/include/type_traits | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index 35777c8e183..653809cb93e 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -1321,6 +1321,71 @@ public: typedef decltype(declval<_Fn>()(declval<_ArgTypes>()...)) type; }; +#if 0 + +template <class _MP, class _Tp, class ..._Args> +struct __result_of_mp; + +// member function pointer + +template <class _R, class _Class, class _Tp, class ..._Params, class ..._Args> +struct __result_of_mp<_R (_Class::*)(_Params...), _Tp, _Args...> +{ + typedef _R type; +}; + +template <class _R, class _Class, class _Tp, class ..._Params, class ..._Args> +struct __result_of_mp<_R (_Class::*)(_Params...) const, _Tp, _Args...> +{ + typedef _R type; +}; + +template <class _R, class _Class, class _Tp, class ..._Params, class ..._Args> +struct __result_of_mp<_R (_Class::*)(_Params...) volatile, _Tp, _Args...> +{ + typedef _R type; +}; + +template <class _R, class _Class, class _Tp, class ..._Params, class ..._Args> +struct __result_of_mp<_R (_Class::*)(_Params...) const volatile, _Tp, _Args...> +{ + typedef _R type; +}; + +// member data pointer + +template <class _MP, class _Tp, bool> +struct __result_of_mdp; + +template <class _R, class _Class, class _Tp> +struct __result_of_mdp<_R _Class::*, _Tp, false> +{ + typedef typename __apply_cv<decltype(*_STD::declval<_Tp>()), _R>::type type; +}; + +template <class _R, class _Class, class _Tp> +struct __result_of_mdp<_R _Class::*, _Tp, true> +{ + typedef typename __apply_cv<_Tp, _R>::type&& type; +}; + +template <class _R, class _Class, class _Tp> +struct __result_of_mp<_R _Class::*, _Tp> + : public __result_of_mdp<_R _Class::*, _Tp, + is_base_of<_Class, typename remove_reference<_Tp>::type>::value> +{ +}; + +template <class _Fn, class _Tp, class ..._ArgTypes> +class __result_of<_Fn(_Tp, _ArgTypes...), false> // _Fn must be member pointer + : public __result_of_mp<_Fn, _Tp, _ArgTypes...> +{ +}; + +#endif + +// result_of + template <class _Fn, class ..._ArgTypes> class result_of<_Fn(_ArgTypes...)> : public __result_of<_Fn(_ArgTypes...), |

