min()/max() members are static, because these facts independent from state of the object. Both members are constexpr, because returned values known at compile time. No instance of r8 is needed to reach these information:
Because we query something about the state, I optionated on function members. std::numeric_limit class example of this.
The keyword static kind of overloaded. When used on global scope functions/variables, it resembles anonymous namespace. When used on function scope variables, they preserve their values on each call:
staticint k = 0; staticintf(){ staticint i = 0; return ++i; }
namespace { int k = 0; intf(){ staticint i = 0; return ++i; } }