Skip to content

Commit a9e6596

Browse files
committed
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
1 parent 90d990e commit a9e6596

File tree

86 files changed

+8469
-52
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+8469
-52
lines changed

libcxx/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,6 @@ target/
5656
# MSVC libraries test harness
5757
env.lst
5858
keep.lst
59+
60+
# Editor by-products
61+
.vscode/

libcxx/include/__config

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -914,6 +914,10 @@ extern "C" void __sanitizer_annotate_contiguous_container(
914914
#define _LIBCPP_SAFE_STATIC
915915
#endif
916916

917+
#if !__has_builtin(__builtin_addressof) && _GNUC_VER < 700
918+
#define _LIBCPP_HAS_NO_BUILTIN_ADDRESSOF
919+
#endif
920+
917921
#endif // __cplusplus
918922

919923
#endif // _LIBCPP_CONFIG

0 commit comments

Comments
 (0)