diff --git a/libcxx/test/std/utilities/optional/optional.specalg/make_optional.pass.cpp b/libcxx/test/std/utilities/optional/optional.specalg/make_optional.pass.cpp --- a/libcxx/test/std/utilities/optional/optional.specalg/make_optional.pass.cpp +++ b/libcxx/test/std/utilities/optional/optional.specalg/make_optional.pass.cpp @@ -25,29 +25,32 @@ int main(int, char**) { - using std::optional; - using std::make_optional; { - int arr[10]; ((void)arr); - ASSERT_SAME_TYPE(decltype(make_optional(arr)), optional); + int arr[10]; + auto opt = std::make_optional(arr); + ASSERT_SAME_TYPE(decltype(opt), std::optional); + assert(*opt == arr); } { - constexpr auto opt = make_optional(2); - ASSERT_SAME_TYPE(decltype(opt), const optional); + constexpr auto opt = std::make_optional(2); + ASSERT_SAME_TYPE(decltype(opt), const std::optional); static_assert(opt.value() == 2); } { - optional opt = make_optional(2); + auto opt = std::make_optional(2); + ASSERT_SAME_TYPE(decltype(opt), std::optional); assert(*opt == 2); } { - std::string s("123"); - optional opt = make_optional(s); - assert(*opt == s); + const std::string s = "123"; + auto opt = std::make_optional(s); + ASSERT_SAME_TYPE(decltype(opt), std::optional); + assert(*opt == "123"); } { - std::unique_ptr s(new int(3)); - optional> opt = make_optional(std::move(s)); + std::unique_ptr s = std::make_unique(3); + auto opt = std::make_optional(std::move(s)); + ASSERT_SAME_TYPE(decltype(opt), std::optional>); assert(**opt == 3); assert(s == nullptr); } diff --git a/libcxx/test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp b/libcxx/test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp --- a/libcxx/test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp +++ b/libcxx/test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp @@ -21,26 +21,23 @@ int main(int, char**) { - using std::optional; - using std::make_optional; - { - constexpr auto opt = make_optional('a'); - static_assert(*opt == int('a'), ""); + constexpr auto opt = std::make_optional('a'); + static_assert(*opt == int('a')); } { - std::string s("123"); - auto opt = make_optional(s); - assert(*opt == s); + std::string s = "123"; + auto opt = std::make_optional(s); + assert(*opt == "123"); } { - std::unique_ptr s(new int(3)); - auto opt = make_optional>(std::move(s)); + std::unique_ptr s = std::make_unique(3); + auto opt = std::make_optional>(std::move(s)); assert(**opt == 3); assert(s == nullptr); } { - auto opt = make_optional(4u, 'X'); + auto opt = std::make_optional(4u, 'X'); assert(*opt == "XXXX"); } diff --git a/libcxx/test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp b/libcxx/test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp --- a/libcxx/test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp +++ b/libcxx/test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp @@ -12,43 +12,54 @@ // template // constexpr optional make_optional(initializer_list il, Args&&... args); +#include +#include #include #include -#include -#include #include "test_macros.h" struct TestT { int x; int size; - constexpr TestT(std::initializer_list il) : x(*il.begin()), size(static_cast(il.size())) {} - constexpr TestT(std::initializer_list il, const int*) - : x(*il.begin()), size(static_cast(il.size())) {} + int *ptr; + constexpr TestT(std::initializer_list il) + : x(*il.begin()), size(static_cast(il.size())), ptr(nullptr) {} + constexpr TestT(std::initializer_list il, int *p) + : x(*il.begin()), size(static_cast(il.size())), ptr(p) {} }; -int main(int, char**) +constexpr bool test() { - using std::make_optional; - { - constexpr auto opt = make_optional({42, 2, 3}); - ASSERT_SAME_TYPE(decltype(opt), const std::optional); - static_assert(opt->x == 42, ""); - static_assert(opt->size == 3, ""); - } - { - constexpr auto opt = make_optional({42, 2, 3}, nullptr); - static_assert(opt->x == 42, ""); - static_assert(opt->size == 3, ""); - } - { - auto opt = make_optional({'1', '2', '3'}); - assert(*opt == "123"); - } - { - auto opt = make_optional({'a', 'b', 'c'}, std::allocator{}); - assert(*opt == "abc"); - } + { + auto opt = std::make_optional({42, 2, 3}); + ASSERT_SAME_TYPE(decltype(opt), std::optional); + assert(opt->x == 42); + assert(opt->size == 3); + assert(opt->ptr == nullptr); + } + { + int i = 42; + auto opt = std::make_optional({42, 2, 3}, &i); + ASSERT_SAME_TYPE(decltype(opt), std::optional); + assert(opt->x == 42); + assert(opt->size == 3); + assert(opt->ptr == &i); + } + return true; +} +int main(int, char**) +{ + test(); + static_assert(test()); + { + auto opt = std::make_optional({'1', '2', '3'}); + assert(*opt == "123"); + } + { + auto opt = std::make_optional({'a', 'b', 'c'}, std::allocator{}); + assert(*opt == "abc"); + } return 0; }