From 3ddb332e6314887378ddbd49c9ebc49fb4ae2d54 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 18 Jul 2018 07:02:15 +0200 Subject: compat/macros: more decltype(auto) --- compat/macros.hpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'compat') 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 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>(INIT##ident); \ }()) @@ -96,9 +96,13 @@ constexpr cc_forceinline void static_warn() {} #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(auto) ret1324 = (x); __VA_ARGS__; return ret1324; \ + })()) // end c++-only macros #endif -- cgit v1.2.3