In your example, where functor
is a type, opposed to an object, the expression functor()
is called an explicit type convertion in functional notation. A temporary object of type functor
is created. The new operator is not involved in any way. The exact grammar of the explicit type convertion expression is simple-type-specifier ( expression-list-opt )
, typename-specifier ( expression-list-opt )
. Note that I used the suffix -opt opposed to the subscribt opt as the standard does it. See 5.2.3 Explicit type conversion (functional notation) [expr.type.conv] in the C++14 standard, or here on cppreference.
If the left hand side of (
is an expression, as in functor f; f()
, the expression f()
is a function call. The exact grammar is postfix-expression ( expression-list-opt )
. See 5.2.2 Function call [expr.call] in the C++14 standard, or here on cppereference. Here you would say that the function call operator is used. The type of f
, here functor
, must overload the function call operator, see e.g. chapter 'Function call operator' here on cpprefrence. You might also want to read the page Function objects on cppreference.