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