diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2018-04-27 20:23:54 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2018-04-27 20:26:17 +0200 |
commit | eb7f23d1c95c4f435a6bc808bbef9e05c551b8eb (patch) | |
tree | ba809d40da97b0ac245f026b85b2dfabb13df158 | |
parent | e36b3c4919a703b20838fa3c23456326b9d84b72 (diff) |
compat/macros: add static_warning macro
-rw-r--r-- | compat/macros.hpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/compat/macros.hpp b/compat/macros.hpp index b0c7a51d..c0bc66f4 100644 --- a/compat/macros.hpp +++ b/compat/macros.hpp @@ -47,5 +47,43 @@ #endif #if defined __cplusplus + +// from now only C++ macros + # define thunk(...) ([&]() { __VA_ARGS__; }) + +#if defined _MSC_VER +# define OTR_DEPRECATE(msg, decl, body) __declspec(deprecated(msg)) decl body +#else +# define OTR_DEPRECATE(msg, decl, body) decl body __attribute__((deprecated(msg))) +#endif + +#if !defined PP_CAT +# define PP_CAT(x,y) PP_CAT1(x,y) +# define PP_CAT1(x,y) x##y +#endif + +namespace static_warning_detail { + template<bool> struct test___132; + + template<> + struct test___132<true> + { + static constexpr inline void check() {} + }; +} // ns static_warning_detail + +#define static_warning_template(cond, msg) \ + { \ + template<bool> \ + struct ::static_warning_detail::test___132 \ + { \ + OTR_DEPRECATE(msg, static constexpr inline void check(), {}) \ + }; \ + ::static_warning_detail::test___132<(cond)>::check(); \ + } + +#define static_warning(cond, msg) \ + static_warning_template(cond, PP_CAT(msg, PP_CAT("\nExpression: ", #cond))) + #endif |