================ @@ -0,0 +1,49 @@ +//===----------------------------------------------------------------------===// +// 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 +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 + +// constexpr void value() const &; +// Mandates: is_copy_constructible_v<E> is true. + +// constexpr void value() &&; +// Mandates: is_copy_constructible_v<E> is true and is_move_constructible_v<E> is true. + +#include <expected> + +#include "MoveOnly.h" + +struct CopyOnly { + CopyOnly() = default; + CopyOnly(const CopyOnly&) = default; + CopyOnly(CopyOnly&&) = delete; +}; + +void test() { + // MoveOnly type as error_type + std::expected<void, MoveOnly> e(std::unexpect, 5); + + e.value(); // expected-note {{in instantiation of member function 'std::expected<void, MoveOnly>::value' requested here}} + // expected-error@*:* {{static assertion failed due to requirement 'is_copy_constructible_v<MoveOnly>'}} + + std::move(e) + .value(); // expected-note {{in instantiation of member function 'std::expected<void, MoveOnly>::value' requested here}} + // expected-error@*:* {{static assertion failed due to requirement 'is_copy_constructible_v<MoveOnly>': error_type has to be both copy constructible and move constructible}} + + // CopyOnly type as error_type + std::expected<void, CopyOnly> e2(std::unexpect); + + e2.value(); + + std::move(e2) + .value(); // expected-note {{in instantiation of member function 'std::expected<void, CopyOnly>::value' requested here}} + // expected-error@*:* {{static assertion failed due to requirement 'is_move_constructible_v<CopyOnly>': error_type has to be both copy constructible and move constructible}} + + // expected-error@*:* {{call to deleted constructor of 'MoveOnly'}} + // expected-error@*:* {{call to deleted constructor of 'CopyOnly'}} + // expected-error@*:* {{call to deleted constructor of 'CopyOnly'}} ---------------- PragmaTwice wrote:
Ahhh I see. Thank you! https://github.com/llvm/llvm-project/pull/71819 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits