summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-10-16 03:21:35 +0000
committerEric Fiselier <eric@efcs.ca>2016-10-16 03:21:35 +0000
commit015fcffd57fb71fa29d307ac54b8626c8088b856 (patch)
tree4ffc8d764b5835c6045967064c23274e12e8db27 /libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
parent50253ed1c67b75c71c8ec2d24ed915c032b11822 (diff)
downloadbcm5719-llvm-015fcffd57fb71fa29d307ac54b8626c8088b856.tar.gz
bcm5719-llvm-015fcffd57fb71fa29d307ac54b8626c8088b856.zip
Update status for std::optional LWG issues and fix an optional SFINAE bug
llvm-svn: 284323
Diffstat (limited to 'libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp')
-rw-r--r--libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
index 6abdd0db63c..1207e24150f 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
@@ -48,6 +48,16 @@ struct MismatchType {
MismatchType& operator=(char*) = delete;
};
+struct FromOptionalType {
+ using Opt = std::optional<FromOptionalType>;
+ FromOptionalType() = default;
+ FromOptionalType(FromOptionalType const&) = delete;
+ template <class Dummy = void>
+ constexpr FromOptionalType(Opt&) { Dummy::BARK; }
+ template <class Dummy = void>
+ constexpr FromOptionalType& operator=(Opt&) { Dummy::BARK; return *this; }
+};
+
void test_sfinae() {
using I = TestTypes::TestType;
using E = ExplicitTestTypes::TestType;
@@ -68,6 +78,8 @@ void test_sfinae() {
assert_assignable<MismatchType, int>();
assert_assignable<MismatchType, int*, false>();
assert_assignable<MismatchType, char*, false>();
+ // Type constructible from optional
+ assert_assignable<FromOptionalType, std::optional<FromOptionalType>&, false>();
}
void test_with_test_type()
OpenPOWER on IntegriCloud