diff options
| author | Casey Carter <Casey@Carter.net> | 2017-08-31 17:56:31 +0000 | 
|---|---|---|
| committer | Casey Carter <Casey@Carter.net> | 2017-08-31 17:56:31 +0000 | 
| commit | e38efe12daf83d09c52419460fbe8b2e0376dd87 (patch) | |
| tree | 54cb7357dcf8e45d9aa760683ffe146d746ed035 /libcxx/test/std/utilities/optional/optional.nullopt | |
| parent | 6589748920e150b5c69bdfe8baeb4baa0b23024c (diff) | |
| download | bcm5719-llvm-e38efe12daf83d09c52419460fbe8b2e0376dd87.tar.gz bcm5719-llvm-e38efe12daf83d09c52419460fbe8b2e0376dd87.zip  | |
[test] Cleanup nullopt_t tests
* Update specification text from N4387
* Delete not_brace_initializable.fail.cpp: it's redundant with nullopt_t.fail.cpp
* is_empty<T> implies is_class<T>
* is_literal is deprecated; directly verify that we can create a nullopt_t in a constexpr context
Differential Revision: D37024
llvm-svn: 312256
Diffstat (limited to 'libcxx/test/std/utilities/optional/optional.nullopt')
3 files changed, 14 insertions, 44 deletions
diff --git a/libcxx/test/std/utilities/optional/optional.nullopt/not_brace_initializable.fail.cpp b/libcxx/test/std/utilities/optional/optional.nullopt/not_brace_initializable.fail.cpp deleted file mode 100644 index 86da5054a70..00000000000 --- a/libcxx/test/std/utilities/optional/optional.nullopt/not_brace_initializable.fail.cpp +++ /dev/null @@ -1,25 +0,0 @@ -//===----------------------------------------------------------------------===// -// -//                     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. -// -//===----------------------------------------------------------------------===// - -// UNSUPPORTED: c++98, c++03, c++11, c++14 -// <optional> - -// struct nullopt_t{see below}; - -#include <optional> - -using std::optional; -using std::nullopt_t; - -int main() -{ -    // I roughly interpret LWG2736 as "it shall not be possible to copy-list-initialize nullopt_t with an -    // empty braced-init-list." -    nullopt_t foo = {}; -} diff --git a/libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.fail.cpp b/libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.fail.cpp index 84f1e78ca2a..c97bebe29c3 100644 --- a/libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.fail.cpp +++ b/libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.fail.cpp @@ -11,15 +11,13 @@  // <optional>  // struct nullopt_t{see below}; -// constexpr nullopt_t nullopt(unspecified); +// inline constexpr nullopt_t nullopt(unspecified);  // [optional.nullopt]/2: -//   Type nullopt_t shall not have a default constructor or an initializer-list constructor. -//   It shall not be an aggregate and shall be a literal type. -//   Constant nullopt shall be initialized with an argument of literal type. +//   Type nullopt_t shall not have a default constructor or an initializer-list +//   constructor, and shall not be an aggregate.  #include <optional> -#include "test_macros.h"  int main()  { diff --git a/libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.pass.cpp b/libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.pass.cpp index 9b752a665a8..247fce58fe9 100644 --- a/libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.pass.cpp +++ b/libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.pass.cpp @@ -11,33 +11,30 @@  // <optional>  // struct nullopt_t{see below}; -// constexpr nullopt_t nullopt(unspecified); +// inline constexpr nullopt_t nullopt(unspecified);  // [optional.nullopt]/2: -//   Type nullopt_t shall not have a default constructor or an initializer-list constructor. -//   It shall not be an aggregate and shall be a literal type. -//   Constant nullopt shall be initialized with an argument of literal type. +//   Type nullopt_t shall not have a default constructor or an initializer-list +//   constructor, and shall not be an aggregate.  #include <optional>  #include <type_traits> -using std::optional;  using std::nullopt_t;  using std::nullopt; -constexpr -int -test(const nullopt_t&) +constexpr bool test()  { -    return 3; +    nullopt_t foo{nullopt}; +    (void)foo; +    return true;  }  int main()  { -    static_assert(( std::is_class<nullopt_t>::value), ""); -    static_assert(( std::is_empty<nullopt_t>::value), ""); -    static_assert(( std::is_literal_type<nullopt_t>::value), ""); -    static_assert((!std::is_default_constructible<nullopt_t>::value), ""); +    static_assert(std::is_empty_v<nullopt_t>); +    static_assert(!std::is_default_constructible_v<nullopt_t>); -    static_assert(test(nullopt) == 3, ""); +    static_assert(std::is_same_v<const nullopt_t, decltype(nullopt)>); +    static_assert(test());  }  | 

