- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have found that the following code (which compiles with gfortran) produceses an error with ifort 17.0.1.
module test_mod
implicit none
type, abstract :: bin_op_type
contains
procedure(bin_op), deferred :: is_equal
generic :: operator(==) => is_equal
end type bin_op_type
abstract interface
logical function bin_op(this,other)
import :: bin_op_type
class(bin_op_type), intent(in) :: this, other
end function bin_op
end interface
type, extends(bin_op_type) :: example_type
real :: contents
contains
procedure :: is_equal => example_is_equal
end type example_type
contains
logical function example_is_equal(this,other)
class(example_type), intent(in) :: this
class(bin_op_type), intent(in) :: other
example_is_equal = .true.
end function example_is_equal
end module
module dependency
use test_mod
implicit none
contains
subroutine bug_example(obj1,obj2)
class(example_type) :: obj1
class(bin_op_type) :: obj2
logical :: result
result = (obj1 == obj2) !This compiles
result = (obj2 == obj1) !This doesn't
end subroutine bug_example
end module
It produces the following error message:
binary_op.f90(44): error #6355: This binary operation is invalid for this data type. [OBJ2]
result = (obj2 == obj1) !This doesn't
--------------^
binary_op.f90(44): error #6355: This binary operation is invalid for this data type. [OBJ1]
result = (obj2 == obj1) !This doesn't
----------------------^
compilation aborted for binary_op.f90 (code 1)
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you for the convenient reproducer. Our apologies for the additional problem. I escalated this to Development and inquired about any possible work around.
(Internal tracking id: DPD200417363)
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page