3 ! PR 44549: [OOP][F2008] Type-bound procedure: bogus error from list after PROCEDURE
5 ! Contributed by Dominique d'Humieres <dominiq@lps.ens.fr>
7 MODULE rational_numbers
10 TYPE,PUBLIC :: rational
15 ! ordinary type-bound procedure
16 PROCEDURE :: real => rat_to_real
17 ! specific type-bound procedures for generic support
18 PROCEDURE,PRIVATE :: rat_asgn_i, rat_plus_rat, rat_plus_i
19 PROCEDURE,PRIVATE,PASS(b) :: i_plus_rat
20 ! generic type-bound procedures
21 GENERIC :: ASSIGNMENT(=) => rat_asgn_i
22 GENERIC :: OPERATOR(+) => rat_plus_rat, rat_plus_i, i_plus_rat
25 ELEMENTAL REAL FUNCTION rat_to_real(this) RESULT(r)
26 CLASS(rational),INTENT(IN) :: this
27 r = REAL(this%n)/this%d
30 impure ELEMENTAL SUBROUTINE rat_asgn_i(a,b)
31 CLASS(rational),INTENT(OUT) :: a
32 INTEGER,INTENT(IN) :: b
37 ELEMENTAL TYPE(rational) FUNCTION rat_plus_i(a,b) RESULT(r)
38 CLASS(rational),INTENT(IN) :: a
39 INTEGER,INTENT(IN) :: b
44 ELEMENTAL TYPE(rational) FUNCTION i_plus_rat(a,b) RESULT(r)
45 INTEGER,INTENT(IN) :: a
46 CLASS(rational),INTENT(IN) :: b
51 ELEMENTAL TYPE(rational) FUNCTION rat_plus_rat(a,b) RESULT(r)
52 CLASS(rational),INTENT(IN) :: a,b
53 r%n = a%n*b%d + b%n*a%d