1! { dg-do compile }
2!
3! PR fortran/39427
4!
5! Check constructor functionality.
6!
7! Contributed by Damian Rouson.
8!
9module mycomplex_module
10   private
11   public :: mycomplex
12   type mycomplex
13!      private
14      real :: argument, modulus
15   end type
16   interface mycomplex
17      module procedure complex_to_mycomplex, two_reals_to_mycomplex
18   end interface
19!   :
20   contains
21      type(mycomplex) function complex_to_mycomplex(c)
22         complex, intent(in) :: c
23!         :
24      end function complex_to_mycomplex
25      type(mycomplex) function two_reals_to_mycomplex(x,y)
26         real, intent(in)           :: x
27         real, intent(in), optional :: y
28!         :
29       end function two_reals_to_mycomplex
30!       :
31    end module mycomplex_module
32!    :
33program myuse
34    use mycomplex_module
35    type(mycomplex) :: a, b, c
36!    :
37    a = mycomplex(argument=5.6, modulus=1.0)  ! The structure constructor
38    c = mycomplex(x=0.0, y=1.0)               ! A function reference
39    c = mycomplex(0.0, 1.0)               ! A function reference
40end program myuse
41