9#ifndef CLANG_BASIC_CUSTOMIZABLEOPTIONAL_H
10#define CLANG_BASIC_CUSTOMIZABLEOPTIONAL_H
12#include "llvm/ADT/Hashing.h"
13#include "llvm/Support/Compiler.h"
14#include "llvm/Support/type_traits.h"
22namespace optional_detail {
41 : Storage(
std::in_place,
std::move(y)) {}
44 template <
typename... ArgTypes>
55 Storage = std::move(y);
61 template <
typename... ArgTypes>
void emplace(ArgTypes &&...Args) {
62 Storage.emplace(std::forward<ArgTypes>(Args)...);
71 void reset() { Storage.reset(); }
74 constexpr bool has_value()
const {
return Storage.has_value(); }
75 constexpr const T *
operator->()
const {
return &Storage.value(); }
77 constexpr const T &
operator*() const & {
return Storage.value(); }
80 template <
typename U>
constexpr T value_or(
U &&alt)
const & {
84 T &&
operator*() && {
return std::move(Storage.value()); }
87 return has_value() ? std::move(
operator*()) : std::forward<U>(alt);
99template <
typename T,
typename U>
107template <
typename T,
typename U>
113template <
typename T,
typename U>
121template <
typename T,
typename U>
127template <
typename T,
typename U>
133template <
typename T,
typename U>
146 return X == std::nullopt;
151 return !(
X == std::nullopt);
156 return X != std::nullopt;
166 return X.has_value();
171 return !(std::nullopt <
X);
176 return !(
X < std::nullopt);
181 return std::nullopt <
X;
186 return X < std::nullopt;
191 return std::nullopt <=
X;
196 return X <= std::nullopt;
constexpr CustomizableOptional(std::in_place_t, ArgTypes &&...Args)
constexpr T value_or(U &&alt) const &
CustomizableOptional & operator=(const CustomizableOptional &O)=default
constexpr CustomizableOptional(T &&y)
void emplace(ArgTypes &&...Args)
Create a new object by constructing it in place with the given arguments.
constexpr bool has_value() const
constexpr CustomizableOptional(const CustomizableOptional &O)=default
constexpr CustomizableOptional(std::nullopt_t)
constexpr const T * operator->() const
CustomizableOptional & operator=(const T &y)
constexpr CustomizableOptional(std::optional< T > &&y)
constexpr const T & operator*() const &
CustomizableOptional & operator=(CustomizableOptional &&O)=default
CustomizableOptional & operator=(T &&y)
constexpr CustomizableOptional(const std::optional< T > &y)
constexpr CustomizableOptional()=default
constexpr CustomizableOptional(CustomizableOptional &&O)=default
constexpr CustomizableOptional(const T &y)
The JSON file list parser is used to communicate input to InstallAPI.
bool operator==(const CallGraphNode::CallRecord &LHS, const CallGraphNode::CallRecord &RHS)
bool operator<(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
bool operator!=(CanQual< T > x, CanQual< U > y)
bool operator<=(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
llvm::hash_code hash_value(const CustomizableOptional< T > &O)
bool operator>(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
const FunctionProtoType * T
bool operator>=(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
hash_code hash_value(const clang::tooling::dependencies::ModuleID &ID)