In the previous post, we were talking about the constexpr keyword in modern C++. It was added to the C++ 11 standard, but in C++ 14, it got a very nice addition. In particular, you can do more in constexpr functions now.
Consider the following program that wants to pre-compute a factorial of 5.
#include <iostream>
int factorial(int n) {
    int r = 1;
    do r *= n; while (--n);
    return r;
}
int main() {
    auto f5 = factorial(5);
    std::cout << f5 << std::endl;
}
Obviously, f5 is a constant, and even more, it is a constant expression. Although, you cannot declare it as constexpr in C++ 11.
The following updated program is an example of how you would do it:
#include <iostream>
constexpr int factorial(int n) {
    int r = 1;
    do r *= n; while (--n);
    return r;
}
int main() {
    constexpr auto f5 = factorial(5);
    std::cout << f5 << std::endl;
}
If you compile the program against the C++ 11 standard, you get an error:
$ g++ -std=c++11 test.cpp test.cpp:4:9: warning: variable declaration in a constexpr function is a C++14 extension [-Wc++14-extensions] int r = 1; ^ test.cpp:5:5: error: statement not allowed in constexpr function do r *= n; while (--n); ^ 1 warning and 1 error generated.
Actually, the error message gives a solution. Switch to C++ 14:
$ g++ -std=c++14 test.cpp $ ./a.out 120