summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2013-05-15 21:49:27 +0000
committerHoward Hinnant <hhinnant@apple.com>2013-05-15 21:49:27 +0000
commit0125ab809fce11d478f7600fc2bb1772d60b82c4 (patch)
tree375e08ce52b349331c82a5d193c2fcb38692d34e
parent598123ede4b0f699542fdedb57fc2b7a31ed7fe5 (diff)
downloadbcm5719-llvm-0125ab809fce11d478f7600fc2bb1772d60b82c4.tar.gz
bcm5719-llvm-0125ab809fce11d478f7600fc2bb1772d60b82c4.zip
Remove cv qualifiers from member pointers in the __member_pointer_traits test. This was causing a const-qualified bind result to malfunction. This was a recent regression due to the new use of __member_pointer_traits in restricting the __invokable and __invoke_of tests.
llvm-svn: 181935
-rw-r--r--libcxx/include/type_traits2
-rw-r--r--libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp18
2 files changed, 19 insertions, 1 deletions
diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits
index cc8a68ecc6f..4997b4b17c1 100644
--- a/libcxx/include/type_traits
+++ b/libcxx/include/type_traits
@@ -1653,7 +1653,7 @@ struct __member_pointer_traits_imp<_Rp _Class::*, false, true>
template <class _MP>
struct __member_pointer_traits
- : public __member_pointer_traits_imp<_MP,
+ : public __member_pointer_traits_imp<typename remove_cv<_MP>::type,
is_member_function_pointer<_MP>::value,
is_member_object_pointer<_MP>::value>
{
diff --git a/libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp b/libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp
index 6b18fa295bc..1125844a1f3 100644
--- a/libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp
+++ b/libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp
@@ -260,6 +260,24 @@ test_void_2()
}
}
+struct TFENode
+{
+ bool foo(unsigned long long) const
+ {
+ return true;
+ }
+};
+
+void
+test3()
+{
+ using namespace std;
+ using namespace std::placeholders;
+ const auto f = bind(&TFENode::foo, _1, 0UL);
+ const TFENode n = TFENode{};
+ bool b = f(n);
+}
+
int main()
{
test_void_1();
OpenPOWER on IntegriCloud