19template <
typename Func>
20class LazyPrvalue final {
21 static_assert(!std::is_reference_v<Func>);
24 constexpr explicit LazyPrvalue(
const Func& func) : func_(func) {}
26 constexpr explicit LazyPrvalue(Func&& func) : func_(std::move(func)) {}
28 LazyPrvalue(LazyPrvalue&&) =
delete;
29 LazyPrvalue& operator=(LazyPrvalue&&) =
delete;
31 constexpr operator std::invoke_result_t<Func&&>() && {
32 return std::move(func_)();