Files
libcxx/test/std/utilities/optional/optional.nullopt/nullopt_t.pass.cpp
Casey Carter 08242cbd9b [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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@312256 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-31 17:56:31 +00:00

41 lines
1.0 KiB
C++

//===----------------------------------------------------------------------===//
//
// 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};
// inline constexpr nullopt_t nullopt(unspecified);
// [optional.nullopt]/2:
// 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::nullopt_t;
using std::nullopt;
constexpr bool test()
{
nullopt_t foo{nullopt};
(void)foo;
return true;
}
int main()
{
static_assert(std::is_empty_v<nullopt_t>);
static_assert(!std::is_default_constructible_v<nullopt_t>);
static_assert(std::is_same_v<const nullopt_t, decltype(nullopt)>);
static_assert(test());
}