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])
. A non-static
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
.