There are two sets of parentheses in the declaration. The outer set of parentheses are the parameter list of the function bar
:
Foo bar(Baz());
^ ^
Baz()
in this declaration is a function type. The parentheses in a function type declaration delimit the parameter list of that function.
Foo bar(Baz());
^^
To clarify: In the context of a function parameter declarator, a function type is adjusted to be a pointer to a function of that type. So the declaration is in fact equivalent to:
Foo bar(Baz(*)());
^ ^
The highlighted parentheses of this alternative pointer argument declarator are not present in the "pre-adjustement" declaration.
Relevant standard rule:
[dcl.fct]
The type of a function is determined using the following rules.
The type of each parameter (including function parameter packs) is determined from its own decl-specifier-seq and declarator.
After determining the type of each parameter, any parameter of type “array of T” or of function type T is adjusted to be “pointer to T”. ...