https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78737
--- Comment #22 from Paul Thomas <pault at gcc dot gnu.org> --- (In reply to janus from comment #20) > (In reply to Damian Rouson from comment #19) > > > On thinking about it, is the specific instance of write_formatted allowed? > > > > I believe not. Note 7.50 of the 31 August 2016 draft Fortran 2015 standard > > includes the following: > > > > "The dynamic type of an object cannot be abstract; therefore, a deferred > > type-bound procedure cannot be invoked." > > > > I interpret the above quote to mean that write_formatted as written in > > comment #15 cannot be invoked. Presumably that also means it is invalid > > code. > > I'm not so sure here. Actually I tend to believe that comment 15 as such is > valid. It just has two different things that (incidentally) share the same > name (which is not forbidden in this context): > 1) The deferred TBP 'write_formatted' of the type 'object'. As it is > deferred, it has no implementation in that type and can only be invoked > polymorphically. > 2) The subroutine 'write_formatted' in the module 'object_interface'. I > don't see anything that would prevent you from defining a subroutine in this > way, but it simply cannot be interpreted as the implementation of the > deferred TBP. > > But then gfortran's runtime-interpretation of this code is wrong. It prints > (with Paul's patch) > > write_formatted => 99 > write_formatted2 => 99 > > since it calls 'write_formatted' as a DTIO procedure of the type 'object', > which it is not! I think the correct output would only consist of the second > line: > > write_formatted2 => 99 Dear Damian and Janus, As you might have gathered, I agree with both of you. In the words of Jean-Luc Picard, "I will make it so." If we are to have dynamic dispatch for UD-DTIO, where does it stop? Operators, user defined operators? As you say, it is possible but the standards do not seem to mandate it. Paul