diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-10-16 03:21:35 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-10-16 03:21:35 +0000 |
commit | 015fcffd57fb71fa29d307ac54b8626c8088b856 (patch) | |
tree | 4ffc8d764b5835c6045967064c23274e12e8db27 /libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp | |
parent | 50253ed1c67b75c71c8ec2d24ed915c032b11822 (diff) | |
download | bcm5719-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.cpp | 12 |
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() |