Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'  next -- Keyboard shortcut: 'n'          constexpr/constexpr-1-statass.cpp - The same program - with results statically asserted.Lecture 6 - slide 33 : 40
Program 2

// 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 <iostream>

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");