[cfe-commits] [libcxx] r160562 - in /libcxx/trunk/include: functional type_traits

Howard Hinnant hhinnant at apple.com
Fri Jul 20 11:56:07 PDT 2012


Author: hhinnant
Date: Fri Jul 20 13:56:07 2012
New Revision: 160562

URL: http://llvm.org/viewvc/llvm-project?rev=160562&view=rev
Log:
Further tweaks on relaxing complete type checking for function.

Modified:
    libcxx/trunk/include/functional
    libcxx/trunk/include/type_traits

Modified: libcxx/trunk/include/functional
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/functional?rev=160562&r1=160561&r2=160562&view=diff
==============================================================================
--- libcxx/trunk/include/functional (original)
+++ libcxx/trunk/include/functional Fri Jul 20 13:56:07 2012
@@ -1113,7 +1113,8 @@
         _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>

Modified: libcxx/trunk/include/type_traits
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/type_traits?rev=160562&r1=160561&r2=160562&view=diff
==============================================================================
--- libcxx/trunk/include/type_traits (original)
+++ libcxx/trunk/include/type_traits Fri Jul 20 13:56:07 2012
@@ -2717,37 +2717,37 @@
 
 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 @@
 
 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>
 {
 };
 





More information about the cfe-commits mailing list