Re: [PATCH] D11553: [libcxx] Rewrite C++03 __invoke.

2015-08-26 Thread Eric Fiselier via cfe-commits
EricWF updated this revision to Diff 33235.
EricWF added a comment.

Address @mclow.lists note about consistency.


http://reviews.llvm.org/D11553

Files:
  include/__functional_base
  include/__functional_base_03
  include/functional
  test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp
  test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp

Index: test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
===
--- test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
+++ test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
@@ -15,6 +15,8 @@
 
 // Don't allow binding to a temp
 
+// XFAIL: c++98, c++03
+
 #include functional
 
 struct A {};
Index: test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp
===
--- test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp
+++ test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp
@@ -13,6 +13,8 @@
 
 // reference_wrapper(T) = delete;
 
+// XFAIL: c++98, c++03
+
 #include functional
 #include cassert
 
Index: include/functional
===
--- include/functional
+++ include/functional
@@ -1262,22 +1262,102 @@
 #else
 
 template class _A0
+_LIBCPP_INLINE_VISIBILITY
 typename __invoke_return0type, _A0::type
 operator() (_A0 __a0) const {
 return __invoke(__f_, __a0);
 }
 
+template class _A0
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return0type, _A0 const::type
+operator() (_A0 const __a0) const {
+return __invoke(__f_, __a0);
+}
+
 template class _A0, class _A1
+_LIBCPP_INLINE_VISIBILITY
 typename __invoke_return1type, _A0, _A1::type
 operator() (_A0 __a0, _A1 __a1) const {
 return __invoke(__f_, __a0, __a1);
 }
 
+template class _A0, class _A1
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return1type, _A0 const, _A1::type
+operator() (_A0 const __a0, _A1 __a1) const {
+return __invoke(__f_, __a0, __a1);
+}
+
+template class _A0, class _A1
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return1type, _A0, _A1 const::type
+operator() (_A0 __a0, _A1 const __a1) const {
+return __invoke(__f_, __a0, __a1);
+}
+
+template class _A0, class _A1
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return1type, _A0 const, _A1 const::type
+operator() (_A0 const __a0, _A1 const __a1) const {
+return __invoke(__f_, __a0, __a1);
+}
+
 template class _A0, class _A1, class _A2
+_LIBCPP_INLINE_VISIBILITY
 typename __invoke_return2type, _A0, _A1, _A2::type
 operator() (_A0 __a0, _A1 __a1, _A2 __a2) const {
 return __invoke(__f_, __a0, __a1, __a2);
 }
+
+template class _A0, class _A1, class _A2
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return2type, _A0 const, _A1, _A2::type
+operator() (_A0 const __a0, _A1 __a1, _A2 __a2) const {
+return __invoke(__f_, __a0, __a1, __a2);
+}
+
+template class _A0, class _A1, class _A2
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return2type, _A0, _A1 const, _A2::type
+operator() (_A0 __a0, _A1 const __a1, _A2 __a2) const {
+return __invoke(__f_, __a0, __a1, __a2);
+}
+
+template class _A0, class _A1, class _A2
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return2type, _A0, _A1, _A2 const::type
+operator() (_A0 __a0, _A1 __a1, _A2 const __a2) const {
+return __invoke(__f_, __a0, __a1, __a2);
+}
+
+template class _A0, class _A1, class _A2
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return2type, _A0 const, _A1 const, _A2::type
+operator() (_A0 const __a0, _A1 const __a1, _A2 __a2) const {
+return __invoke(__f_, __a0, __a1, __a2);
+}
+
+template class _A0, class _A1, class _A2
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return2type, _A0 const, _A1, _A2 const::type
+operator() (_A0 const __a0, _A1 __a1, _A2 const __a2) const {
+return __invoke(__f_, __a0, __a1, __a2);
+}
+
+template class _A0, class _A1, class _A2
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return2type, _A0, _A1 const, _A2 const::type
+operator() (_A0 __a0, _A1 const __a1, _A2 const __a2) const {
+return __invoke(__f_, __a0, __a1, __a2);
+}
+
+template class _A0, class _A1, class _A2
+_LIBCPP_INLINE_VISIBILITY
+typename __invoke_return2type, _A0 const, _A1 const, _A2 const::type
+operator() (_A0 const __a0, _A1 const __a1, _A2 const __a2) const {
+return __invoke(__f_, __a0, __a1, __a2);
+}
 #endif
 };
 
Index: include/__functional_base_03
===
--- include/__functional_base_03
+++ 

Re: [PATCH] D11553: [libcxx] Rewrite C++03 __invoke.

2015-08-26 Thread Marshall Clow via cfe-commits
mclow.lists added inline comments.


Comment at: include/__functional_base:521
@@ +520,3 @@
+operator() (_ArgTypes... __args) const {
+return __invoke(get(), _VSTD::forward_ArgTypes(__args)...);
+}

I know you didn't change this, but how did we get away with an `` w/o a 
`#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES` ?



http://reviews.llvm.org/D11553



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D11553: [libcxx] Rewrite C++03 __invoke.

2015-08-26 Thread Marshall Clow via cfe-commits
mclow.lists accepted this revision.
mclow.lists added a comment.
This revision is now accepted and ready to land.

Ok, I think this is good to go. Thanks, Eric.


http://reviews.llvm.org/D11553



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D11553: [libcxx] Rewrite C++03 __invoke.

2015-08-26 Thread Marshall Clow via cfe-commits
mclow.lists added a comment.

So far, this looks good. I'm going to apply it locally and futz with it.



Comment at: include/__functional_base_03:30
@@ +29,3 @@
+typedef _Ret _Bullet2;
+typedef _Ret type;
+};

Let's be consistent. :-)
 typedef _Bullet2 type;


http://reviews.llvm.org/D11553



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits