llvm-project/libcxx/test/std/utilities
Eric Fiselier a9e659619f Implement N4606 optional
Summary:
Adapt implementation of Library Fundamentals TS optional into an implementation of N4606 optional.

  - Update relational operators per http://wg21.link/P0307
  - Update to requirements of http://wg21.link/P0032
  - Extension: Implement trivial copy/move construction/assignment for `optional<T>` when `T` is trivially copyable.

Audit P/Rs for optional LWG issues:
  - 2756 "C++ WP optional<T> should 'forward' T's implicit conversions" Implemented, which also resolves 2753 "Optional's constructors and assignments need constraints" (modulo my refusal to explicitly delete the move operations, which is a design error that I'm working on correcting in the 2756 P/R).
  - 2736 "nullopt_t insufficiently constrained" Already conforming. I've added a test ensuring that `nullopt_t` is not copy-initializable from an empty braced-init-list, which I believe is the root intent of the issue, to avoid regression.
  - 2740 "constexpr optional<T>::operator->" Already conforming.
  - 2746 "Inconsistency between requirements for emplace between optional and variant" No P/R, but note that the author's '"suggested resolution" is already implemented.
  - 2748 "swappable traits for optionals" Already conforming.
  - 2753 "Optional's constructors and assignments need constraints" Implemented.

Most of the work for this patch was done by Casey Carter @ Microsoft. Thank you Casey!



Reviewers: mclow.lists, CaseyCarter, EricWF

Differential Revision: https://reviews.llvm.org/D22741

llvm-svn: 283980
2016-10-12 07:46:20 +00:00
..
allocator.adaptor Remove all instances of _LIBCPP_HAS_NO_RVALUE_REFERENCES from test/std/utilities 2016-10-01 10:46:01 +00:00
any Fix various issues in std::any and the related tests. 2016-10-07 21:27:45 +00:00
function.objects Add tests to check that swap(std::function, std::function) is noexcept. This is LWG#2062, but we already do this. No changes to the library, just adding tests. 2016-10-10 16:47:48 +00:00
intseq Fix two more tests that hang when testing against libstdc++ 2016-10-12 04:56:23 +00:00
memory Fix incorrect exception handling behavior in the uninitialized algorithms 2016-10-11 21:13:44 +00:00
meta Implement N4606 optional 2016-10-12 07:46:20 +00:00
optional Implement N4606 optional 2016-10-12 07:46:20 +00:00
ratio Move remaining _LIBCPP_VERSION tests into test/libcxx 2016-06-22 02:23:22 +00:00
template.bitset Move remaining _LIBCPP_VERSION tests into test/libcxx 2016-06-22 02:23:22 +00:00
time Prevent failures by marking Clock::is_steady tests as UNSUPPORTED: asan. 2016-07-18 02:29:33 +00:00
tuple Add missing <memory> include in test 2016-10-08 00:59:16 +00:00
type.index Move remaining _LIBCPP_VERSION tests into test/libcxx 2016-06-22 02:23:22 +00:00
utilities.general
utility Fix shadow warnings. Patch from STL@microsoft.com 2016-10-07 22:10:35 +00:00
utility.requirements
nothing_to_do.pass.cpp