diff options
author | Howard Hinnant <hhinnant@apple.com> | 2013-05-15 21:49:27 +0000 |
---|---|---|
committer | Howard Hinnant <hhinnant@apple.com> | 2013-05-15 21:49:27 +0000 |
commit | 0125ab809fce11d478f7600fc2bb1772d60b82c4 (patch) | |
tree | 375e08ce52b349331c82a5d193c2fcb38692d34e | |
parent | 598123ede4b0f699542fdedb57fc2b7a31ed7fe5 (diff) | |
download | bcm5719-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_traits | 2 | ||||
-rw-r--r-- | libcxx/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp | 18 |
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(); |