Ensuring that:
* it still works as before on C++98 and C++03
* C++11 "strict" constexpr is used where possible
- requires replacing { R x; return f(x); } with { return f(R()); }
* C++14 "relaxed" constexpr is used only where otherwise impossible
- assignment operators
- functions who's implementations require more than a single return
statement