Geschachtelter abgeleiteter Typ mit überladener Zuweisung

Ich habe einen abgeleiteten Typ (wrapper) mit einem anderen abgeleiteten Typ (over). Für letztere wurde der Zuweisungsoperator überladen. Da die Zuweisung abgeleiteter Typen standardmäßig komponentenweise erfolgt, würde ich davon ausgehen, dass zwei Instanzen von zugewiesen werdenwrapper würde die überladene Zuordnung für aufrufenover irgendwann. Mit dem folgenden Programm scheint dies jedoch nicht der Fall zu sein. Die überladene Zuordnung wird nur aufgerufen, wenn ich auch die Zuordnung für überladewrapper mit einemausdrücklich Zuordnung zwischen Instanzen vonover (indem Sie die kommentierten Codezeilen auskommentieren). Warum? Ich finde es etwas kontraintuitiv. Gibt es eine Möglichkeit, die Überlastung der Verpackungsart zu vermeiden?

module test_module
  implicit none

  type :: over
    integer :: ii = 0
  end type over

  type :: wrapper
    type(over) :: myover
  end type wrapper

  interface assignment(=)
    module procedure over_assign
    !module procedure wrapper_assign
  end interface assignment(=)

contains

  subroutine over_assign(other, self)
    type(over), intent(out) :: other
    type(over), intent(in) :: self

    print *, "Assignment of over called"
    other%ii = -1

  end subroutine over_assign

  !subroutine wrapper_assign(other, self)
  !  type(wrapper), intent(out) :: other
  !  type(wrapper), intent(in) :: self
  !
  !  other%myover = self%myover
  !
  !end subroutine wrapper_assign

end module test_module

program test
  use test_module
  implicit none

  type(wrapper) :: w1, w2

  print *, "Assigning wrapper instances:"
  w2 = w1

end program test

Antworten auf die Frage(2)

Ihre Antwort auf die Frage