diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2018-05-25 02:08:49 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2018-05-25 02:08:49 +0000 |
commit | f35b4bc3954f3b01051fc0848535ff784809e9e2 (patch) | |
tree | dabc2dc569fed5fd7bd481f61ffc5b148ca7a2d0 /libcxx/test/std/utilities | |
parent | e6c30fdda7991cfcedff2ba778b93b958b0d5077 (diff) | |
download | bcm5719-llvm-f35b4bc3954f3b01051fc0848535ff784809e9e2.tar.gz bcm5719-llvm-f35b4bc3954f3b01051fc0848535ff784809e9e2.zip |
Add deduction guides for optional
llvm-svn: 333251
Diffstat (limited to 'libcxx/test/std/utilities')
-rw-r--r-- | libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/deduct.fail.cpp | 38 | ||||
-rw-r--r-- | libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/deduct.pass.cpp | 44 |
2 files changed, 82 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/deduct.fail.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/deduct.fail.cpp new file mode 100644 index 00000000000..4ebafad6b92 --- /dev/null +++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/deduct.fail.cpp @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <optional> +// UNSUPPORTED: c++98, c++03, c++11, c++14 +// UNSUPPORTED: libcpp-no-deduction-guides + + +// template<class T> +// optional(T) -> optional<T>; + + +#include <optional> +#include <cassert> + +struct A {}; + +int main() +{ +// Test the explicit deduction guides + +// Test the implicit deduction guides + { +// optional() + std::optional opt; // expected-error {{no viable constructor or deduction guide for deduction of template arguments of 'optional'}} + } + + { +// optional(nullopt_t) + std::optional opt(std::nullopt); // expected-error-re@optional:* {{static_assert failed{{.*}} "instantiation of optional with nullopt_t is ill-formed"}} + } +} diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/deduct.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/deduct.pass.cpp new file mode 100644 index 00000000000..1ef7a3a34ad --- /dev/null +++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/deduct.pass.cpp @@ -0,0 +1,44 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// <optional> +// UNSUPPORTED: c++98, c++03, c++11, c++14 +// UNSUPPORTED: libcpp-no-deduction-guides + + +// template<class T> +// optional(T) -> optional<T>; + + +#include <optional> +#include <cassert> + +struct A {}; + +int main() +{ +// Test the explicit deduction guides + { +// optional(T) + std::optional opt(5); + static_assert(std::is_same_v<decltype(opt), std::optional<int>>, ""); + assert(static_cast<bool>(opt)); + assert(*opt == 5); + } + + { +// optional(T) + std::optional opt(A{}); + static_assert(std::is_same_v<decltype(opt), std::optional<A>>, ""); + assert(static_cast<bool>(opt)); + } + +// Test the implicit deduction guides + +} |