Add macro DUNE_ASSERT_AND_RETURN
This is an alternative to !128 (closed).
In C++11 and with not fully C++14 compliant compilers constexpr
functions
can only have a return statement. This prevents the use of assert()
inside
of constexpr
functions. This macro can be used as a workaround like this:
constexpr auto foo(int a, int b, x)
{
return DUNE_ASSERT_AND_RETURN(a<b, x);
}
For NDEBUG
there is no penalty. Otherwise there are two options:
- In a non-
constexpr
context anassert()
will fail if the condition is not matched. The error message will be slightly different from a classic assertion. - In a
constexpr
context theassert()
branch will be ignored if the is condition is matched. Otherwise this will lead to a compile error (likestatic_assert
) because the branch usingassert()
is notconstexpr
.