This builds on the code snippet in Quote #2 in the topic: https://software.intel.com/en-us/forums/topic/536577. Compiler 15, Update 1 gives "warning #7026: Non-standard extension." with /stand:f08. To me, this is unexpected. Comments?
MODULE m USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY : I4 => INT32, SP => REAL32, DP => REAL64 IMPLICIT NONE !.. PRIVATE !.. PUBLIC :: I4, SP, DP TYPE, PUBLIC :: t(k,n) PRIVATE INTEGER(I4), KIND :: k = SP INTEGER(I4), LEN :: n = 1 REAL(k) :: m_X(n) CONTAINS PRIVATE PROCEDURE, PASS(This) :: GetX_SP PROCEDURE, PASS(This) :: GetX_DP PROCEDURE, PASS(This) :: SetX_SP PROCEDURE, PASS(This) :: SetX_DP GENERIC, PUBLIC :: X => GetX_SP, GetX_DP GENERIC, PUBLIC :: SetX => SetX_SP, SetX_DP END TYPE t CONTAINS PURE FUNCTION GetX_SP(This) RESULT(RetVal) CLASS(t(SP,*)), INTENT(IN) :: This !.. Function result REAL(SP), ALLOCATABLE :: RetVal(:) RetVal = This%m_X RETURN END FUNCTION GetX_SP PURE FUNCTION GetX_DP(This) RESULT(RetVal) CLASS(t(DP,*)), INTENT(IN) :: This !.. Function result REAL(DP), ALLOCATABLE :: RetVal(:) RetVal = This%m_X RETURN END FUNCTION GetX_DP PURE SUBROUTINE SetX_SP(This, Arr) CLASS(t(SP,*)), INTENT(INOUT) :: This REAL(SP), INTENT(IN) :: Arr(:) IF (SIZE(Arr) == This%n) THEN This%m_X = Arr END IF RETURN END SUBROUTINE SetX_SP PURE SUBROUTINE SetX_DP(This, Arr) CLASS(t(DP,*)), INTENT(INOUT) :: This REAL(DP), INTENT(IN) :: Arr(:) IF (SIZE(Arr) == This%n) THEN This%m_X = Arr END IF RETURN END SUBROUTINE SetX_DP END MODULE m
------ Build started: Project: TestFor, Configuration: Debug|Win32 ------ Compiling with Intel(R) Visual Fortran Compiler XE 15.0.1.148 [IA-32]... TestMod.f90 C:\..\TestMod.f90(56): warning #7026: Non-standard extension. [T#4&*] C:\..\TestMod.f90(69): warning #7026: Non-standard extension. [T#8&*] Build log written to "file://C:\..\Debug\Win32\TestForBuildLog.htm" TestFor - 0 error(s), 2 warning(s) ---------------------- Done ----------------------