Calling function in delphi mode without brackets is allowed, in objfpc is completely different.
You can also in general call functions in non-Delphi modes without brackets.
There are only two cases where brackets are required:
1. If you have a function
A then its result variable is also named
A (in addition to
Result in modes
ObjFPC and
Delphi). You can assign to this variable and you can also read from it. Now if you are inside function
A and there is a variant of
A that has no arguments (it can be the same function or an overload) then there are two possibilites that can be done if
A is inside an expression: read the variable or call the function. Delphi calls the function, but FPC reads the variable, except if you use round brackets and thus mark it as a call.
2. If you have a procedure variable it is used to decide whether you read the value of the procedure variable or you call the procedure variable (especially important if the procedure variable is for a function).