summaryrefslogtreecommitdiffstats
path: root/libcxx/include/__functional_base
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-04-18 06:17:30 +0000
committerEric Fiselier <eric@efcs.ca>2016-04-18 06:17:30 +0000
commit2152fd7682e3725449fc6483141dc55fc80dad16 (patch)
treeffc09c3c81b33127dc7ea73eccf76d9b8272de4a /libcxx/include/__functional_base
parent76a7ca0f67379705773c4d1da89e546667ff25f2 (diff)
downloadbcm5719-llvm-2152fd7682e3725449fc6483141dc55fc80dad16.tar.gz
bcm5719-llvm-2152fd7682e3725449fc6483141dc55fc80dad16.zip
Implement LWG issue 2219 - support reference_wrapper in INVOKE
llvm-svn: 266590
Diffstat (limited to 'libcxx/include/__functional_base')
-rw-r--r--libcxx/include/__functional_base26
1 files changed, 22 insertions, 4 deletions
diff --git a/libcxx/include/__functional_base b/libcxx/include/__functional_base
index 52c535aa3ea..3274842dc93 100644
--- a/libcxx/include/__functional_base
+++ b/libcxx/include/__functional_base
@@ -322,6 +322,17 @@ __invoke(_Fp&& __f, _A0&& __a0, _Args&& ...__args)
return (_VSTD::forward<_A0>(__a0).*__f)(_VSTD::forward<_Args>(__args)...);
}
+
+template <class _Fp, class _A0, class ..._Args,
+ class>
+inline _LIBCPP_INLINE_VISIBILITY
+auto
+__invoke(_Fp&& __f, _A0&& __a0, _Args&& ...__args)
+ -> decltype((__a0.get().*__f)(_VSTD::forward<_Args>(__args)...))
+{
+ return (__a0.get().*__f)(_VSTD::forward<_Args>(__args)...);
+}
+
template <class _Fp, class _A0, class ..._Args,
class>
inline _LIBCPP_INLINE_VISIBILITY
@@ -344,6 +355,17 @@ __invoke(_Fp&& __f, _A0&& __a0)
return _VSTD::forward<_A0>(__a0).*__f;
}
+
+template <class _Fp, class _A0,
+ class>
+inline _LIBCPP_INLINE_VISIBILITY
+auto
+__invoke(_Fp&& __f, _A0&& __a0)
+ -> decltype(__a0.get().*__f)
+{
+ return __a0.get().*__f;
+}
+
template <class _Fp, class _A0,
class>
inline _LIBCPP_INLINE_VISIBILITY
@@ -577,10 +599,6 @@ public:
#endif // _LIBCPP_HAS_NO_VARIADICS
};
-template <class _Tp> struct __is_reference_wrapper_impl : public false_type {};
-template <class _Tp> struct __is_reference_wrapper_impl<reference_wrapper<_Tp> > : public true_type {};
-template <class _Tp> struct __is_reference_wrapper
- : public __is_reference_wrapper_impl<typename remove_cv<_Tp>::type> {};
template <class _Tp>
inline _LIBCPP_INLINE_VISIBILITY
OpenPOWER on IntegriCloud