summaryrefslogtreecommitdiffhomepage
path: root/compat
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2019-02-28 20:01:17 +0100
committerStanislaw Halik <sthalik@misaki.pl>2019-02-28 20:03:57 +0100
commit87838c82cf6848cf5dc4bc95a82c7b127c4a9d83 (patch)
treeb8a404b2062664c5106dc95725fb03f9519b3579 /compat
parentc6c57b868f418f4566b2d6773e04300a313f41a6 (diff)
compat/macros: move more macros to macros1
Actually `macros.hpp' should become a util header.
Diffstat (limited to 'compat')
-rw-r--r--compat/macros.hpp21
-rw-r--r--compat/macros1.h6
2 files changed, 6 insertions, 21 deletions
diff --git a/compat/macros.hpp b/compat/macros.hpp
index 08be9b4a..497933cf 100644
--- a/compat/macros.hpp
+++ b/compat/macros.hpp
@@ -2,10 +2,6 @@
#include "macros1.h"
-#ifdef __cplusplus
-
-// from now only C++
-
#include <utility>
#include <type_traits>
@@ -23,24 +19,7 @@ using remove_cvref_t = typename cxx20_compat::remove_cvref<t>::type;
template<typename t>
using to_const_ref_t = std::add_lvalue_reference_t<std::add_const_t<remove_cvref_t<t>>>;
-// causes ICE in Visual Studio 2017 Preview. the ICE was reported and they handle them seriously in due time.
-// the ICE is caused by decltype(auto) and const& return value
-//#define eval_once(expr) ([&]() -> decltype(auto) { static decltype(auto) ret___1132 = (expr); return (decltype(ret___1132) const&) ret___1132; }())
-
-#define eval_once(expr) eval_once2(expr, __COUNTER__)
-
-#define eval_once2(expr, ctr) \
- ([&] { \
- [[maybe_unused]] \
- static auto PP_CAT(init, ctr) = (((void)(expr)), 0); \
- }())
-
template<typename t>
using cv_qualified = std::conditional_t<std::is_fundamental_v<remove_cvref_t<t>>,
remove_cvref_t<t>,
to_const_ref_t<t>>;
-
-#define progn(...) ([&]() -> decltype(auto) { __VA_ARGS__ }())
-
-// end c++-only macros
-#endif
diff --git a/compat/macros1.h b/compat/macros1.h
index b1137e63..5e3129d5 100644
--- a/compat/macros1.h
+++ b/compat/macros1.h
@@ -39,3 +39,9 @@
#else
# define unreachable() do { __builtin_unreachable(); *(volatile int*)nullptr = 0; } while (0) /* NOLINT(clang-analyzer-core.NullDereference) */
#endif
+
+#ifdef __cplusplus
+# define progn(...) ([&]() -> decltype(auto) { __VA_ARGS__ }())
+# define eval_once(expr) eval_once2(expr, __COUNTER__)
+# define eval_once2(expr, ctr) ([&] { [[maybe_unused]] static auto init ## ctr = (((void)(expr)), 0); }())
+#endif