1! { dg-do compile } 2! 3! PR 41556: [OOP] Errors in applying operator/assignment to an abstract type 4! 5! Contributed by Damian Rouson <damian@rouson.net> 6 7module abstract_algebra 8 implicit none 9 private 10 public :: rescale 11 public :: object 12 13 type ,abstract :: object 14 contains 15 procedure(assign_interface) ,deferred :: assign 16 procedure(product_interface) ,deferred :: product 17 generic :: assignment(=) => assign 18 generic :: operator(*) => product 19 end type 20 21 abstract interface 22 function product_interface(lhs,rhs) result(product) 23 import :: object 24 class(object) ,intent(in) :: lhs 25 class(object) ,allocatable :: product 26 real ,intent(in) :: rhs 27 end function 28 subroutine assign_interface(lhs,rhs) 29 import :: object 30 class(object) ,intent(inout) :: lhs 31 class(object) ,intent(in) :: rhs 32 end subroutine 33 end interface 34 35contains 36 37 subroutine rescale(operand,scale) 38 class(object) :: operand 39 real ,intent(in) :: scale 40 operand = operand*scale 41 operand = operand%product(scale) 42 end subroutine 43end module 44