Tweak to make clang blocks work with std::functional (very fragile)
llvm-svn: 115461
diff --git a/libcxx/include/__functional_base_03 b/libcxx/include/__functional_base_03
index 86a804a..368110b 100644
--- a/libcxx/include/__functional_base_03
+++ b/libcxx/include/__functional_base_03
@@ -873,7 +873,7 @@
template <class _F>
inline _LIBCPP_INLINE_VISIBILITY
-typename result_of<_F()>::type
+decltype(declval<_F>()())
__invoke(_F __f)
{
return __f();
@@ -881,7 +881,7 @@
template <class _F, class _A0>
inline _LIBCPP_INLINE_VISIBILITY
-typename result_of<_F(_A0)>::type
+decltype(declval<_F>()(declval<_A0&>()))
__invoke(_F __f, _A0& __a0)
{
return __f(__a0);
@@ -889,7 +889,7 @@
template <class _F, class _A0, class _A1>
inline _LIBCPP_INLINE_VISIBILITY
-typename result_of<_F(_A0, _A1)>::type
+decltype(declval<_F>()(declval<_A0&>(), declval<_A1&>()))
__invoke(_F __f, _A0& __a0, _A1& __a1)
{
return __f(__a0, __a1);
@@ -897,7 +897,7 @@
template <class _F, class _A0, class _A1, class _A2>
inline _LIBCPP_INLINE_VISIBILITY
-typename result_of<_F(_A0, _A1, _A2)>::type
+decltype(declval<_F>()(declval<_A0&>(), declval<_A1&>(), declval<_A2&>()))
__invoke(_F __f, _A0& __a0, _A1& __a1, _A2& __a2)
{
return __f(__a0, __a1, __a2);