William Tran-Viet 389a23c538
[libc++] Implement P2988R12: std::optional<T&> (#155202)
Resolves #148131

- Unlock `std::optional<T&>` implementation
- Allow instantiations of `optional<T(&)(...)>` and `optional<T(&)[]>`
but disables `value_or()` and `optional::iterator` + all `iterator`
related functions
- Update documentation
- Update tests
2025-11-12 11:00:08 +08:00

48 lines
1.3 KiB
C++

// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
export namespace std {
// [optional.optional], class template optional
using std::optional;
#if _LIBCPP_STD_VER >= 26
// [optional.iterators], iterator support
namespace ranges {
using std::ranges::enable_borrowed_range;
using std::ranges::enable_view;
} // namespace ranges
#endif
// [optional.nullopt], no-value state indicator
using std::nullopt;
using std::nullopt_t;
// [optional.bad.access], class bad_optional_access
using std::bad_optional_access;
#if _LIBCPP_STD_VER >= 26
using std::format_kind;
#endif
// [optional.relops], relational operators
using std::operator==;
using std::operator!=;
using std::operator<;
using std::operator>;
using std::operator<=;
using std::operator>=;
using std::operator<=>;
// [optional.specalg], specialized algorithms
using std::swap;
using std::make_optional;
// [optional.hash], hash support
using std::hash;
} // namespace std