Вложенный производный тип с перегруженным назначением
У меня есть производный тип (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