summaryrefslogtreecommitdiffstats
path: root/libcxx/test
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2017-03-30 19:43:50 +0000
committerEric Fiselier <eric@efcs.ca>2017-03-30 19:43:50 +0000
commitd3209f932f73087c33ccae4b7e7403ca4ad94d28 (patch)
treea4d4ecd1a700f0e28d87ac8a2c815673e48f4544 /libcxx/test
parent21e8ce398d21f0d89c8c5a52d077305dbf68543a (diff)
downloadbcm5719-llvm-d3209f932f73087c33ccae4b7e7403ca4ad94d28.tar.gz
bcm5719-llvm-d3209f932f73087c33ccae4b7e7403ca4ad94d28.zip
Implement LWG 2842 - optional(U&&) needs to SFINAE on decay_t<in_place_t>
llvm-svn: 299100
Diffstat (limited to 'libcxx/test')
-rw-r--r--libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp
index 4020d70a46f..d068fbc2db7 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp
@@ -35,6 +35,11 @@ struct ExplicitThrow
constexpr explicit ExplicitThrow(int x) { if (x != -1) TEST_THROW(6);}
};
+struct ImplicitAny {
+ template <class U>
+ constexpr ImplicitAny(U&&) {}
+};
+
template <class To, class From>
constexpr bool implicit_conversion(optional<To>&& opt, const From& v)
@@ -79,6 +84,15 @@ void test_implicit()
using T = TestTypes::TestType;
assert(implicit_conversion<T>(3, T(3)));
}
+ {
+ using O = optional<ImplicitAny>;
+ static_assert(!test_convertible<O, std::in_place_t>(), "");
+ static_assert(!test_convertible<O, std::in_place_t&>(), "");
+ static_assert(!test_convertible<O, const std::in_place_t&>(), "");
+ static_assert(!test_convertible<O, std::in_place_t&&>(), "");
+ static_assert(!test_convertible<O, const std::in_place_t&&>(), "");
+
+ }
#ifndef TEST_HAS_NO_EXCEPTIONS
{
try {
OpenPOWER on IntegriCloud