With the Fortran 90/95 standard, the name of an internal procedure must not be passed as an argument to another procedure. This means that if you have a single procedure P1, that depends on arbitrary other procedures which share a common interface P2, you either have to:
A) Make many versions of P1 for each version of P2 you are likely to encounter. P2 can be then be internal, external, or module procedures in P1.
B) Declare all P2 as external, and lose all benefits of the use of modules and host association.
I am in a position whereby A) is too tedious since there are lots of P2's, and replication of P1 could lead to errors. Also, my code is structured in such a way that it would become really annoying if I lost the benefits of host association by making the P2's external. Finally, I realise that Compaq Visual Fortran allows one to pass internal procedures as an extension, but I wish to keep my code to the standard, so that it is easily portable.
Has anyone got a work around for this problem which sticks to the fortran 90/95 standard please?