summaryrefslogtreecommitdiffstats
path: root/libcxx/include
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2010-08-18 18:52:04 +0000
committerHoward Hinnant <hhinnant@apple.com>2010-08-18 18:52:04 +0000
commit5e2f7b89e94e63ea026993a6df6b75914a9ea3d4 (patch)
treed89424f0ae4846b6644e5c4663e18e1662772a59 /libcxx/include
parenteaacbc9da6212b03c454065bfd1d2fc2a510810a (diff)
downloadbcm5719-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_traits65
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...),
OpenPOWER on IntegriCloud