xref: /llvm-project/libcxx/include/expected (revision b9a2658a3e8bd13b0f9e7a8a440832a95b377216)
1e356f681SHui Xie// -*- C++ -*-
2e356f681SHui Xie//===----------------------------------------------------------------------===//
3e356f681SHui Xie//
4e356f681SHui Xie// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5e356f681SHui Xie// See https://llvm.org/LICENSE.txt for license information.
6e356f681SHui Xie// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7e356f681SHui Xie//
8e356f681SHui Xie//===----------------------------------------------------------------------===//
9e356f681SHui Xie
10e356f681SHui Xie#ifndef _LIBCPP_EXPECTED
11e356f681SHui Xie#define _LIBCPP_EXPECTED
12e356f681SHui Xie
13e356f681SHui Xie/*
14e356f681SHui Xie  Header <expected> synopsis
15e356f681SHui Xie
16e356f681SHui Xienamespace std {
17e356f681SHui Xie  // [expected.unexpected], class template unexpected
18e356f681SHui Xie  template<class E> class unexpected;
19e356f681SHui Xie
20e356f681SHui Xie  // [expected.bad], class template bad_expected_access
21e356f681SHui Xie  template<class E> class bad_expected_access;
22e356f681SHui Xie
23e356f681SHui Xie  // [expected.bad.void], specialization for void
24e356f681SHui Xie  template<> class bad_expected_access<void>;
25e356f681SHui Xie
26e356f681SHui Xie  // in-place construction of unexpected values
27e356f681SHui Xie  struct unexpect_t {
28e356f681SHui Xie    explicit unexpect_t() = default;
29e356f681SHui Xie  };
30e356f681SHui Xie  inline constexpr unexpect_t unexpect{};
31e356f681SHui Xie
32e356f681SHui Xie  // [expected.expected], class template expected
33e356f681SHui Xie  template<class T, class E> class expected;
34e356f681SHui Xie
35e356f681SHui Xie  // [expected.void], partial specialization of expected for void types
36e356f681SHui Xie  template<class T, class E> requires is_void_v<T> class expected<T, E>;
37e356f681SHui Xie}
38e356f681SHui Xie
39e356f681SHui Xie*/
40e356f681SHui Xie
41*b9a2658aSNikolas Klauser#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
42*b9a2658aSNikolas Klauser#  include <__cxx03/expected>
43*b9a2658aSNikolas Klauser#else
44e356f681SHui Xie#  include <__config>
45dfddc0c4SNikolas Klauser
46dfddc0c4SNikolas Klauser#  if _LIBCPP_STD_VER >= 23
47e356f681SHui Xie#    include <__expected/bad_expected_access.h>
48e356f681SHui Xie#    include <__expected/expected.h>
49e356f681SHui Xie#    include <__expected/unexpect.h>
50e356f681SHui Xie#    include <__expected/unexpected.h>
51dfddc0c4SNikolas Klauser#  endif
52dfddc0c4SNikolas Klauser
53e356f681SHui Xie#  include <version>
54e356f681SHui Xie
55e356f681SHui Xie#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
56e356f681SHui Xie#    pragma GCC system_header
57e356f681SHui Xie#  endif
58*b9a2658aSNikolas Klauser#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
59e356f681SHui Xie
60e356f681SHui Xie#endif // _LIBCPP_EXPECTED
61