Podemos convenir que
FDetail es una variable, concretamente un campo de una clase debidamente instanciada. Eso está bien, pero el "
[FDetail]" que vemos en tu código es lo que formalmente se denomina un
constructor de matriz abierta (
open array constructor).
Ese término no se refiere a un método constructor, sino a una
construcción gramatical que lleva corchetes con el propósito de formar una matriz "al vuelo". Al formarse esa matriz (
array), cada uno de los elementos que contiene son considerados por el compilador como valores constantes (los punteros, no las instancias a las que apuntan). Por ello es que aparece el error que te da el compilador.
Si lo que necesitas es crear una rutina que reciba una matriz abierta de "variables" objeto, piensa en esa matriz o
vector como una lista de punteros. Cada puntero señalando a una variable objeto. Para intentar ilustrarlo, tomo la función ghFreeNil de GH Freebrary que realiza una tarea similar (por ser el ejemplo más cercano que tengo).
Código Delphi
[-] Type
PObject = ^TObject;
...
Procedure ghFreeNil (Const Objs :Array Of PObject);
Var
Obj :PObject;
Begin
For Obj In Objs Do FreeAndNil (Obj^);
End;
...
ghFreeNil ([@MiVariableObjeto1, @MiVariableObjeto2, @MiVariableObjeto3]);
¿Agarras la onda?