Skip to content
Snippets Groups Projects

Add macro DUNE_CONSTEXPR_ASSERT

Closed Carsten Gräser requested to merge feature/constexpr-assert into master
  1. Aug 26, 2016
    • Carsten Gräser's avatar
      Use DUNE_CONSTEXPR_ASSERT · 10fc71b3
      Carsten Gräser authored
      10fc71b3
    • Carsten Gräser's avatar
      Add macro DUNE_CONSTEXPR_ASSERT · 8bac4039
      Carsten Gräser authored
      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`.
      8bac4039
Loading