81#define __WHEN_OBJECT__ __indep_when__
83 class _nout __WHEN_OBJECT__ {
84 BY(ME(__WHEN_OBJECT__))
87 static const me& get();
89 template <
typename R> R& ret([[maybe_unused]] R& r)
const {
return r; }
91 template <
typename R> R* ret([[maybe_unused]] R* r)
const {
return r; }
93 template <
typename R> R&& ret([[maybe_unused]] R&& r)
const {
return std::move(r); }
95 const me& run(
const std::function<
void(
void)>& closure)
const;
99 template <
typename T> tmay<T> retMay()
const {
return tmay<T>(); }
101 template <
typename T,
typename... Ts> tmay<T> retMay(Ts... args)
const {
return tmay<T>(args...); }
105 template <
typename R> R& crash([[maybe_unused]] R& r)
const {
110 template <
typename R> R&& crash([[maybe_unused]] R&& r)
const {
116#define BY_WHEN ::by::__WHEN_OBJECT__::get()
118#define __WHEN_POSTFIX__ return BY_WHEN
119#define WHEN(condition) \
120 if(condition) __WHEN_POSTFIX__
121#define WHEN_NUL_1(v1) \
122 if(nul(v1)) __WHEN_POSTFIX__
123#define WHEN_NUL_2(v1, v2) \
124 if(nul(v1) || nul(v2)) __WHEN_POSTFIX__
125#define WHEN_NUL_3(v1, v2, v3) \
126 if(nul(v1) || nul(v2) || nul(v3)) __WHEN_POSTFIX__
127#define WHEN_NUL_4(v1, v2, v3, v4) \
128 if(nul(v1) || nul(v2) || nul(v3) || nul(v4)) __WHEN_POSTFIX__
129#define WHEN_NUL_5(v1, v2, v3, v4, v5) \
130 if(nul(v1) || nul(v2) || nul(v3) || nul(v4) || nul(v5)) __WHEN_POSTFIX__
131#define WHEN_NUL_6(v1, v2, v3, v4, v5, v6) \
132 if(nul(v1) || nul(v2) || nul(v3) || nul(v4) || nul(v5) || nul(v6)) __WHEN_POSTFIX__
133#define WHEN_NUL(...) BY_OVERLOAD(WHEN_NUL, __VA_ARGS__)