Вложенный производный тип с перегруженным назначением

У меня есть производный тип (wrapper) содержащий другой производный тип (over). Для последнего оператор присваивания был перегружен. Поскольку присваивание производных типов происходит по умолчанию по компонентам, я ожидаю, что назначение двух экземпляровwrapper будет вызывать перегруженное назначение дляover в какой-то момент. Однако, используя программу ниже, это не похоже на случай. Перегруженное назначение вызывается только в том случае, если я также перегружаю назначение дляwrapper содержащийявный назначение между экземплярамиover (раскомментируя закомментированные строки кода). Почему? Я нахожу это несколько противоречивым. Есть ли способ избежать перегрузки в типе упаковки?

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

Ответы на вопрос(2)

Ваш ответ на вопрос