diff options
| -rw-r--r-- | compat/macros.hpp | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/compat/macros.hpp b/compat/macros.hpp index f7fa8f73..465a7d24 100644 --- a/compat/macros.hpp +++ b/compat/macros.hpp @@ -75,7 +75,7 @@ using to_const_lvalue_reference_t = remove_cvref_t<t> const&;  #define eval_once__2(expr, ident) eval_once__3(expr, ident)  #define eval_once__3(expr, ident)                                                               \ -    ([&] {                                                                                      \ +    ([&]() -> decltype(auto) {                                                                                      \          static auto INIT##ident = (expr);                                                       \          return static_cast<to_const_lvalue_reference_t<decltype(INIT##ident)>>(INIT##ident);    \      }()) @@ -96,9 +96,13 @@ constexpr cc_forceinline void static_warn<true>() {}  #define static_warning(cond)            \          static_warn<(cond)>();          \ -#define typed_progn(type, ...) (([&] () -> type { __VA_ARGS__ })()) -#define progn(...) (([&] { __VA_ARGS__ })()) -#define prog1(x, ...) (([&] { decltype(auto) ret1324 = (x); __VA_ARGS__; return ret1324; })()) +#define typed_progn(type, ...) (([&]() -> type { __VA_ARGS__ })()) +#define progn(...) (([&]() -> decltype(auto) { __VA_ARGS__ })()) + +#define prog1(x, ...) (([&]() -> to_const_lvalue_reference_t<decltype((x))>       \ +    {                                                                           \ +        decltype(auto) ret1324 = (x); __VA_ARGS__; return ret1324;              \ +    })())  // end c++-only macros  #endif  | 
