// The same examples again, with static_assert's of results (instead of output at run time). // Compiles without errors, with g++ constexpr-1-statass.cpp -std=c++11 -c // This means that all asserted results are correctly computed at compile time. #include constexpr int I1 = 5, I2 = 7, I3 = 9; constexpr int I4 = (I1 % 2 == 0) ? I2 : I3; constexpr bool even(int n){ return n % 2 == 0; } constexpr int I5 = even(I1) ? I2 : I3; // Eqvivalent to I4 static_assert(I5==I3, "Expected: I5=I3"); constexpr long int fac(int n){ return (n == 0) ? 1 : n * fac(n - 1); } constexpr long int FAC5 = fac(5); static_assert(FAC5==120, "Expected: FAC5 is 120"); constexpr long int FAC10 = fac(10); static_assert(FAC10==3628800, "Expected: FAC10 is 362800"); constexpr long int fib(int n){ return (n == 0) ? 0 : (n == 1) ? 1 : fib(n - 1) + fib(n - 2); } constexpr long int FIB20 = fib(20); static_assert(FIB20==6765, "Expected: FIB20 is 6765");