- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi again,
I am trying to overload the minus operator (-) with two procedures, one defining a subtraction of two objects. and the other defining the negative of a single object:
[fortran]MODULE scalars IMPLICIT NONE ! Access PRIVATE PUBLIC :: oldscalar PUBLIC :: OPERATOR(-) ! Parent type TYPE :: oldscalar COMPLEX :: a CONTAINS PRIVATE PROCEDURE :: eq_sca GENERIC, PUBLIC :: ASSIGNMENT(=) => eq_sca END TYPE oldscalar ! Overloaded operator INTERFACE OPERATOR(-) MODULE PROCEDURE neg_sca MODULE PROCEDURE sub_sca END INTERFACE OPERATOR(-) CONTAINS ! Negative PURE ELEMENTAL FUNCTION neg_sca(u) RESULT(w) CLASS(oldscalar), INTENT(in) :: u TYPE(oldscalar) :: w w%a = -u%a END FUNCTION neg_sca ! Subtraction PURE ELEMENTAL FUNCTION sub_sca(u, v) RESULT(w) CLASS(oldscalar), INTENT(in) :: u, v TYPE(oldscalar) :: w w%a = u%a - v%a END FUNCTION sub_sca ! Convenient assignment for extensions of TYPE(oldscalar) PURE ELEMENTAL SUBROUTINE eq_sca(u, v) CLASS(oldscalar), INTENT(out) :: u TYPE(oldscalar) , INTENT(in) :: v u%a = v%a END SUBROUTINE eq_sca END MODULE scalars MODULE fields USE scalars IMPLICIT NONE ! Extended type TYPE, EXTENDS(oldscalar) :: newscalar END TYPE newscalar ! Yet another new type TYPE :: scalarfield TYPE(newscalar), ALLOCATABLE :: site(:) !TYPE(oldscalar), ALLOCATABLE :: site(:) END TYPE scalarfield ! Overloaded operator INTERFACE OPERATOR(-) MODULE PROCEDURE sub_matf END INTERFACE OPERATOR(-) CONTAINS ! Subtraction PURE ELEMENTAL FUNCTION sub_matf(A, B) RESULT(C) CLASS(scalarfield), INTENT(in) :: A, B TYPE (scalarfield) :: C C%site = A%site - B%site END FUNCTION sub_matf END MODULE fields[/fortran]
This code fails to compile with the Intel Fortran Compiler 12.1.5, returning the following error message:
mod.f90(78): error #6549: An arithmetic or LOGICAL type is required in this context. [SITE]C%site = A%site - B%site-----------------^mod.f90(78): error #6549: An arithmetic or LOGICAL type is required in this context. [SITE]C%site = A%site - B%site--------------------------^mod.f90(78): error #6355: This binary operation is invalid for this data type. [SITE]C%site = A%site - B%site-----------------^mod.f90(78): error #6355: This binary operation is invalid for this data type. [SITE]C%site = A%site - B%site--------------------------^compilation aborted for mod.f90 (code 1)
However, it compiles successfully if either I
- comment out line 21, i.e. dropping out the unary operation, or
- replace line 63 with line 64, i.e. using the parent type instead of the extended type
but I need to use the extended type. Am I doing something wrong?
Thanks,
_helvio_
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I believe this is a compiler bug. I have escalated it as issue DPD200235328 and will update this thread when I have any news.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
This error has been fixed in the compiler sources. I expect the fix to appear in an update in the October timeframe.

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