94#define __WHEN_OBJECT__ __indep_when__
96 class _nout __WHEN_OBJECT__ {
97 BY(ME(__WHEN_OBJECT__))
100 static const me& get();
102 template <
typename R> R& ret([[maybe_unused]] R& r)
const {
return r; }
104 template <
typename R> R* ret([[maybe_unused]] R* r)
const {
return r; }
106 template <
typename R> R&& ret([[maybe_unused]] R&& r)
const {
return std::move(r); }
110 template <
typename T> tmay<T> retMay()
const {
return tmay<T>(); }
112 template <
typename T,
typename... Ts> tmay<T> retMay(Ts... args)
const {
return tmay<T>(args...); }
116 template <
typename R> R& crash([[maybe_unused]] R& r)
const {
121 template <
typename R> R&& crash([[maybe_unused]] R&& r)
const {
127#define BY_WHEN ::by::__WHEN_OBJECT__::get()
129#define __WHEN_POSTFIX__ return BY_WHEN
130#define WHEN(condition) \
131 if(condition) __WHEN_POSTFIX__
132#define WHEN_NUL_1(v1) \
133 if(nul(v1)) __WHEN_POSTFIX__
134#define WHEN_NUL_2(v1, v2) \
135 if(nul(v1) || nul(v2)) __WHEN_POSTFIX__
136#define WHEN_NUL_3(v1, v2, v3) \
137 if(nul(v1) || nul(v2) || nul(v3)) __WHEN_POSTFIX__
138#define WHEN_NUL_4(v1, v2, v3, v4) \
139 if(nul(v1) || nul(v2) || nul(v3) || nul(v4)) __WHEN_POSTFIX__
140#define WHEN_NUL_5(v1, v2, v3, v4, v5) \
141 if(nul(v1) || nul(v2) || nul(v3) || nul(v4) || nul(v5)) __WHEN_POSTFIX__
142#define WHEN_NUL_6(v1, v2, v3, v4, v5, v6) \
143 if(nul(v1) || nul(v2) || nul(v3) || nul(v4) || nul(v5) || nul(v6)) __WHEN_POSTFIX__
144#define WHEN_NUL(...) BY_OVERLOAD(WHEN_NUL, __VA_ARGS__)