summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/utilities/function.objects/bind
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-04-20 00:14:32 +0000
committerEric Fiselier <eric@efcs.ca>2016-04-20 00:14:32 +0000
commit840fa745ca493123c44d7e9b62676f3a0cd23c0d (patch)
tree48f0ece836408898936fa627512b5422a3e562b2 /libcxx/test/std/utilities/function.objects/bind
parent3eef9d180dbc9458f96f3e0f6a79fdee56bb8aae (diff)
downloadbcm5719-llvm-840fa745ca493123c44d7e9b62676f3a0cd23c0d.tar.gz
bcm5719-llvm-840fa745ca493123c44d7e9b62676f3a0cd23c0d.zip
Add 'is_callable' and 'is_nothrow_callable' traits and cleanup INVOKE.
The primary purpose of this patch is to add the 'is_callable' traits. Since 'is_nothrow_callable' required making 'INVOKE' conditionally noexcept I also took this oppertunity to implement a constexpr version of INVOKE. This fixes 'std::experimental::apply' which required constexpr 'INVOKE support'. This patch will be followed up with some cleanup. Primarly removing most of "__member_function_traits" since it's no longer used by INVOKE (in C++11 at least). llvm-svn: 266836
Diffstat (limited to 'libcxx/test/std/utilities/function.objects/bind')
-rw-r--r--libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/PR23141_invoke_not_constexpr.pass.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/PR23141_invoke_not_constexpr.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/PR23141_invoke_not_constexpr.pass.cpp
new file mode 100644
index 00000000000..163b2d9afea
--- /dev/null
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/PR23141_invoke_not_constexpr.pass.cpp
@@ -0,0 +1,35 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++98, c++03
+
+// <functional>
+
+// template<CopyConstructible Fn, CopyConstructible... Types>
+// unspecified bind(Fn, Types...);
+// template<Returnable R, CopyConstructible Fn, CopyConstructible... Types>
+// unspecified bind(Fn, Types...);
+
+// https://llvm.org/bugs/show_bug.cgi?id=23141
+#include <functional>
+#include <type_traits>
+
+struct Fun
+{
+ template<typename T, typename U>
+ void operator()(T && t, U && u) const
+ {
+ static_assert(std::is_same<U, int &>::value, "");
+ }
+};
+
+int main()
+{
+ std::bind(Fun{}, std::placeholders::_1, 42)("hello");
+}
OpenPOWER on IntegriCloud