Skip to content

Add macro DUNE_CONSTEXPR_ASSERT

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

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 CONSTEXPR_ASSERT(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

Loading