diff options
Diffstat (limited to 'CarpetDev/CarpetIOF5/src/iof5.hh')
-rw-r--r-- | CarpetDev/CarpetIOF5/src/iof5.hh | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/CarpetDev/CarpetIOF5/src/iof5.hh b/CarpetDev/CarpetIOF5/src/iof5.hh index 352c83224..c082206c3 100644 --- a/CarpetDev/CarpetIOF5/src/iof5.hh +++ b/CarpetDev/CarpetIOF5/src/iof5.hh @@ -32,6 +32,8 @@ // initialised to false #define FAILWARN(_expr) \ failwarn(error_flag, _expr, __LINE__, __FILE__, CCTK_THORNSTRING, #_expr) +#define FAILWARN0(_expr) \ + failwarn0(error_flag, _expr, __LINE__, __FILE__, CCTK_THORNSTRING, #_expr) template<typename T> static @@ -39,6 +41,7 @@ T failwarn(bool& error_flag, T const expr, int const line, char const *const file, char const *const thorn, char const *const msg) { + static_assert(T(-1) < T(0), "Type T must be signed"); if (expr < 0) { CCTK_VWarn(CCTK_WARN_ALERT, line, file, thorn, "Expression \"%s\" return %d", msg, (int)expr); @@ -47,6 +50,21 @@ T failwarn(bool& error_flag, T const expr, return expr; } +template<typename T> +static +T failwarn0(bool& error_flag, T const expr, + int const line, char const *const file, char const *const thorn, + char const *const msg) +{ + static_assert(T(-1) > T(0), "Type T must be unsigned"); + if (expr == 0) { + CCTK_VWarn(CCTK_WARN_ALERT, line, file, thorn, + "Expression \"%s\" return %d", msg, (int)expr); + error_flag = true; + } + return expr; +} + namespace CarpetIOF5 { |