It is using C++’s template metalanguage to recursively compute a value (possibly very inefficiently — hopefully the compiler keeps a memoized list of precomputed values), but it is totally valid C++17.
To answer your title question, a static member element is not bound to any instance of the object; you can access it either with or without an object. So both lines 14 (no object) and line 16 (object) are valid. You could also create a temporary object:
I was under the impression that static members can't be accessed via class objects.
But... that's the entire point of static members - that there is one value shared by all objects of the same class, and that they can be considered to members of the class as a whole, rather than of a single object.
I feel like you may have misunderstood something important here. Can you explain what it was you thought they were for?