The operands are function_name and an optional expression _list. The operator function operator() must be defined as a nonstatic member function. You cannot declare an overloaded function call operator that is a nonmember function.
If you make the following call for the class object x:
x (arg1, arg2, arg3)
it is interpreted as
x.operator()(arg1, arg2, arg3)
Unlike all other overloaded operators, you can provide default
arguments and ellipses in the argument list for the function call
operator. For example:
class X { public: X& operator() (int = 5); };