Rate this Page
★★★★★
Program Listing for File Optional.h#
↰Return to documentation for file (c10/util/Optional.h)
#ifndef C10_UTIL_OPTIONAL_H_#define C10_UTIL_OPTIONAL_H_#include<optional>#include<type_traits>// Macros.h is not needed, but it does namespace shenanigans that lots// of downstream code seems to rely on. Feel free to remove it and fix// up builds.namespacec10{#if !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED)// NOLINTNEXTLINE(misc-unused-using-decls)usingstd::bad_optional_access;// NOLINTNEXTLINE(misc-unused-using-decls)usingstd::make_optional;// NOLINTNEXTLINE(misc-unused-using-decls)usingstd::nullopt;// NOLINTNEXTLINE(misc-unused-using-decls)usingstd::nullopt_t;// NOLINTNEXTLINE(misc-unused-using-decls)usingstd::optional;#endif#if !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED)namespacedetail_{// the call to convert<A>(b) has return type A and converts b to type A iff b// decltype(b) is implicitly convertible to Atemplate<classU>constexprUconvert(Uv){returnv;}}// namespace detail_template<classT,classF>[[deprecated("Please use std::optional::value_or instead of c10::value_or_else")]]constexprTvalue_or_else(conststd::optional<T>&v,F&&func){static_assert(std::is_convertible_v<typenamestd::invoke_result_t<F>,T>,"func parameters must be a callable that returns a type convertible to the value stored in the optional");returnv.has_value()?*v:detail_::convert<T>(std::forward<F>(func)());}template<classT,classF>[[deprecated("Please use std::optional::value_or instead of c10::value_or_else")]]constexprTvalue_or_else(std::optional<T>&&v,F&&func){static_assert(std::is_convertible_v<typenamestd::invoke_result_t<F>,T>,"func parameters must be a callable that returns a type convertible to the value stored in the optional");returnv.has_value()?constexpr_move(std::move(v).contained_val()):detail_::convert<T>(std::forward<F>(func)());}#endif}// namespace c10#endif// C10_UTIL_OPTIONAL_H_