Author: hhinnant
Date: Fri Dec 10 18:05:19 2010
New Revision: 121600
URL: http://llvm.org/viewvc/llvm-project?rev=121600&view=rev
Log:
The implementation of the new definition of result_of (N3123) resulted in some
test failures in [func.memfn] that I failed to previously notice. This
corrects that mistake.
Modified:
libcxx/trunk/include/type_traits
Modified: libcxx/trunk/include/type_traits
URL:
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/type_traits?rev=121600&r1=121599&r2=121600&view=diff
==============================================================================
--- libcxx/trunk/include/type_traits (original)
+++ libcxx/trunk/include/type_traits Fri Dec 10 18:05:19 2010
@@ -1394,31 +1394,31 @@
typedef decltype(declval<_Fn>()(declval<_ArgTypes>()...)) type;
};
-template <class _MP, class _Tp, class ..._Args>
+template <class _MP, class _Tp, bool _IsMemberFunctionPtr, 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...>
+struct __result_of_mp<_R (_Class::*)(_Params...), _Tp, true, _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...>
+struct __result_of_mp<_R (_Class::*)(_Params...) const, _Tp, true, _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...>
+struct __result_of_mp<_R (_Class::*)(_Params...) volatile, _Tp, true, _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...>
+struct __result_of_mp<_R (_Class::*)(_Params...) const volatile, _Tp, true,
_Args...>
{
typedef _R type;
};
@@ -1441,7 +1441,7 @@
};
template <class _R, class _Class, class _Tp>
-struct __result_of_mp<_R _Class::*, _Tp>
+struct __result_of_mp<_R _Class::*, _Tp, false>
: public __result_of_mdp<_R _Class::*, _Tp,
is_base_of<_Class, typename remove_reference<_Tp>::type>::value>
{
@@ -1449,7 +1449,8 @@
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...>
+ : public __result_of_mp<_Fn, _Tp, is_member_function_pointer<_Fn>::value,
+ _ArgTypes...>
{
};
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits