xref: /llvm-project/libcxx/test/std/utilities/expected/expected.bad/what.pass.cpp (revision 6a54dfbfe534276d644d7f9c027f0deeb748dd53)
1e280407aSLouis Dionne //===----------------------------------------------------------------------===//
2*6a54dfbfSLouis Dionne //
3e280407aSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e280407aSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
5e280407aSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e280407aSLouis Dionne //
7e280407aSLouis Dionne //===----------------------------------------------------------------------===//
8e280407aSLouis Dionne 
9e280407aSLouis Dionne // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
10e280407aSLouis Dionne 
11e280407aSLouis Dionne // const char* what() const noexcept override;
12e280407aSLouis Dionne 
13e280407aSLouis Dionne #include <expected>
14e280407aSLouis Dionne #include <cassert>
15e280407aSLouis Dionne #include <utility>
16e280407aSLouis Dionne 
17e280407aSLouis Dionne #include "test_macros.h"
18e280407aSLouis Dionne 
19e280407aSLouis Dionne struct Foo {};
20e280407aSLouis Dionne 
21e280407aSLouis Dionne int main(int, char**) {
22e280407aSLouis Dionne   {
23e280407aSLouis Dionne     std::bad_expected_access<int> const exc(99);
24e280407aSLouis Dionne     char const* what = exc.what();
25e280407aSLouis Dionne     assert(what != nullptr);
26e280407aSLouis Dionne     ASSERT_NOEXCEPT(exc.what());
27e280407aSLouis Dionne   }
28e280407aSLouis Dionne   {
29e280407aSLouis Dionne     std::bad_expected_access<Foo> const exc(Foo{});
30e280407aSLouis Dionne     char const* what = exc.what();
31e280407aSLouis Dionne     assert(what != nullptr);
32e280407aSLouis Dionne     ASSERT_NOEXCEPT(exc.what());
33e280407aSLouis Dionne   }
34e280407aSLouis Dionne 
35e280407aSLouis Dionne   return 0;
36e280407aSLouis Dionne }
37