File: template_error_09.f90

package info (click to toggle)
lfortran 0.58.0-3
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 54,508 kB
  • sloc: cpp: 162,179; f90: 68,251; python: 17,476; ansic: 6,278; yacc: 2,334; sh: 1,317; fortran: 892; makefile: 34; javascript: 15
file content (32 lines) | stat: -rw-r--r-- 846 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
module std_prop_m
    implicit none
    public

    requirement magma_r(T, bin)
        type, deferred :: T
        pure elemental function bin(x, y) result(bin)
            type(T), intent(in) :: x
            type(T), intent(in) :: y
            type(T) :: bin
        end function
    end requirement

    template commutative_prop(T,bin)
        require :: magma_r(T,bin)
      contains
        pure function commutative_p(x, y) result(prop)
            type(T), intent(in) :: x, y
            type(logical) :: prop

            prop = bin(x,y) == bin(y,x)
        end function
    end template
end module std_prop_m


program test_intrinsic_p
  use std_prop_m
  instantiate commutative_prop(integer,operator(+)), only: int_plus_comm => commutative_p
  print *, "test commutative"
  print *, "int_plus_comm: ", int_plus_comm(3,4)
end program