diff options
author | Howard Hinnant <hhinnant@apple.com> | 2012-07-20 18:56:07 +0000 |
---|---|---|
committer | Howard Hinnant <hhinnant@apple.com> | 2012-07-20 18:56:07 +0000 |
commit | 14c56f6c4a238f00d578c9376a9090990991d77c (patch) | |
tree | ff54213eb79c04eb088d1e2875a8c308b7d1dce1 | |
parent | 9dd82c1d94656932b81146cdf81555347be2486c (diff) | |
download | bcm5719-llvm-14c56f6c4a238f00d578c9376a9090990991d77c.tar.gz bcm5719-llvm-14c56f6c4a238f00d578c9376a9090990991d77c.zip |
Further tweaks on relaxing complete type checking for function.
llvm-svn: 160562
-rw-r--r-- | libcxx/include/functional | 3 | ||||
-rw-r--r-- | libcxx/include/type_traits | 28 |
2 files changed, 16 insertions, 15 deletions
diff --git a/libcxx/include/functional b/libcxx/include/functional index 495ca7ceee9..8c166b73d64 100644 --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -1113,7 +1113,8 @@ class _LIBCPP_VISIBLE function<_Rp(_ArgTypes...)> _LIBCPP_INLINE_VISIBILITY static bool __not_null(const function<_Rp(_Ap...)>& __p) {return __p;} - template <class _Fp, bool = __invokable<_Fp&, _ArgTypes...>::value> + template <class _Fp, bool = !is_same<_Fp, function>::value && + __invokable<_Fp&, _ArgTypes...>::value> struct __callable; template <class _Fp> struct __callable<_Fp, true> diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index bc3c1c20c5e..25295d5f3f5 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -2717,37 +2717,37 @@ struct __check_complete<_Tp&&> template <class _Rp, class ..._Param> struct __check_complete<_Rp (*)(_Param...)> - : private __check_complete<_Param...> + : private __check_complete<_Rp> { }; template <class _Rp, class ..._Param> struct __check_complete<_Rp (_Param...)> - : private __check_complete<_Param...> + : private __check_complete<_Rp> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...)> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) const> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) volatile> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) const volatile> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; @@ -2755,49 +2755,49 @@ struct __check_complete<_Rp (_Class::*)(_Param...) const volatile> template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) &> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) const&> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) volatile&> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) const volatile&> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) &&> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) const&&> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) volatile&&> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; template <class _Rp, class _Class, class ..._Param> struct __check_complete<_Rp (_Class::*)(_Param...) const volatile&&> - : private __check_complete<_Class, _Param...> + : private __check_complete<_Class> { }; |