2 * Copyright (c) 2023 Philippe Proulx <pproulx@efficios.com>
4 * SPDX-License-Identifier: MIT
7 #ifndef BABELTRACE_CPP_COMMON_BT2S_OPTIONAL_HPP
8 #define BABELTRACE_CPP_COMMON_BT2S_OPTIONAL_HPP
10 #include "cpp-common/vendor/optional-lite/optional.hpp"
15 using optional = nonstd::optional<T>;
17 using nullopt_t = nonstd::nullopt_t;
18 using bad_optional_access = nonstd::bad_optional_access;
19 constexpr nullopt_t nullopt {nonstd::nullopt};
22 constexpr optional<typename std::decay<T>::type> make_optional(T&& value)
24 return nonstd::make_optional(std::forward<T>(value));
27 template <typename T, typename... ArgTs>
28 constexpr optional<T> make_optional(ArgTs&&...args)
30 return nonstd::make_optional<T>(std::forward<ArgTs>(args)...);
33 using in_place_t = nonstd::in_place_t;
36 inline in_place_t in_place()
38 return nonstd::in_place<T>();
41 template <std::size_t K>
42 inline in_place_t in_place()
44 return nonstd::in_place<K>();
48 inline in_place_t in_place_type()
50 return nonstd::in_place_type<T>();
53 template <std::size_t K>
54 inline in_place_t in_place_index()
56 return nonstd::in_place_index<K>();
59 } /* namespace bt2s */
61 #endif /* BABELTRACE_CPP_COMMON_BT2S_OPTIONAL_HPP */