Skip to content

Add macro DUNE_ASSERT_AND_RETURN

Carsten Gräser requested to merge feature/assert-and-return into master

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 an assert() will fail if the condition is not matched. The error message will be slightly different from a classic assertion.
  • In a constexpr context the assert() branch will be ignored if the is condition is matched. Otherwise this will lead to a compile error (like static_assert) because the branch using assert() is not constexpr.

Merge request reports