A non-static member function may be called for an object of
its class type, or for an object of a class derived ([class.derived])
from its class type, using the class member
access syntax ([expr.ref], [over.match.call]).
member function may also be called directly using the function call
syntax ([expr.call], [over.match.call]) from within
its class or a class derived from its class, or
a member thereof, as described below.