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