派生类型的空数组

Empty array of derived type

如何正确编写用户派生类型的空数组文字?

以下内容适用于 GFortran,但不适用于版本 19.1.1.217 的 IFort

 type(SpinOrbIdx_t), allocatable :: det_I(:)
det_I = [SpinOrbIdx_t::]

这是 ifort 中的错误,还是 GFortran 的不符合标准的行为?

这确实是声明构造的(零大小)数组类型的正确语法。英特尔 Fortran 拒绝将此作为 Fortran 2003+ 语法是错误的:您应该将此报告给英特尔支持。

在 Fortran 2018 中,这是语法规则 R770(具有 R769 和其他上下文)。

作为变通方法,您可以将 det_I 分配为零大小或使用不带元素的结构构造函数的数组构造函数:

allocate(det_I(0))
det_I = [(SpinOrbIdx(...),i=1,0)]  ! For appropriate structure constructor, etc.