37 template <
typename R,
typename... Args>
38 static R ExtractReturnType(R (*)(Args...));
40 using T = ResultValueT<
decltype(ExtractReturnType(InitFunc))>;
43 template <
typename... Args>
44 requires std::invocable<
decltype(InitFunc), Args...>
45 Result<std::reference_wrapper<T>> Get(Args&&... args)
const {
47 flag_, [
this, &args...]() { value_ = InitFunc(std::forward<Args>(args)...); });
48 ICEBERG_RETURN_UNEXPECTED(value_);
49 return std::ref(*value_);
53 mutable Result<T> value_ = Invalid(
"Lazy value has not been initialized");
54 mutable std::once_flag flag_;