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

У меня есть производный тип (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)

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