1e356f681SHui Xie //===----------------------------------------------------------------------===// 2*6a54dfbfSLouis Dionne // 3e356f681SHui Xie // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e356f681SHui Xie // See https://llvm.org/LICENSE.txt for license information. 5e356f681SHui Xie // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e356f681SHui Xie // 7e356f681SHui Xie //===----------------------------------------------------------------------===// 8e356f681SHui Xie 9e356f681SHui Xie // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 10e356f681SHui Xie 11e356f681SHui Xie // constexpr unexpected& operator=(unexpected&&) = default; 12e356f681SHui Xie 13e356f681SHui Xie #include <cassert> 14e356f681SHui Xie #include <expected> 15e356f681SHui Xie #include <utility> 16e356f681SHui Xie 17e356f681SHui Xie struct Error { 18e356f681SHui Xie int i; 19e356f681SHui Xie constexpr Error(int ii) : i(ii) {} 20e356f681SHui Xie constexpr Error& operator=(Error&& other) { 21e356f681SHui Xie i = other.i; 22e356f681SHui Xie other.i = 0; 23e356f681SHui Xie return *this; 24e356f681SHui Xie } 25e356f681SHui Xie }; 26e356f681SHui Xie 27e356f681SHui Xie constexpr bool test() { 28e356f681SHui Xie std::unexpected<Error> unex1(4); 29e356f681SHui Xie std::unexpected<Error> unex2(5); 30e356f681SHui Xie unex1 = std::move(unex2); 31e356f681SHui Xie assert(unex1.error().i == 5); 32e356f681SHui Xie assert(unex2.error().i == 0); 33e356f681SHui Xie return true; 34e356f681SHui Xie } 35e356f681SHui Xie 36e356f681SHui Xie int main(int, char**) { 37e356f681SHui Xie test(); 38e356f681SHui Xie static_assert(test()); 39e356f681SHui Xie return 0; 40e356f681SHui Xie } 41