(TranslationUnit
    [(Module
        template_struct_01_m
        (TriviaNode
            []
            [(EndOfLine)
            (EndOfLine)]
        )
        []
        [(ImplicitNone
            []
            ()
        )]
        [(Declaration
            ()
            [(SimpleAttribute
                AttrPrivate
            )]
            []
            ()
        )
        (Declaration
            ()
            [(SimpleAttribute
                AttrPublic
            )]
            [(struct_t
            []
            []
            ()
            ()
            None
            ())]
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
        )
        (Requirement
            r
            [t]
            [(DerivedType
                t
                []
                ()
                [(SimpleAttribute
                    AttrDeferred
                )]
                []
                []
            )]
            []
        )
        (Template
            struct_t
            [t]
            [(Require
                [(UnitRequire
                    r
                    [(AttrNamelist
                        t
                    )]
                )]
            )
            (Declaration
                ()
                [(SimpleAttribute
                    AttrPrivate
                )]
                []
                ()
            )
            (Declaration
                ()
                [(SimpleAttribute
                    AttrPublic
                )]
                [(tuple
                []
                []
                ()
                ()
                None
                ())]
                (TriviaNode
                    []
                    [(EndOfLine)
                    (EndOfLine)]
                )
            )
            (DerivedType
                tuple
                []
                (TriviaNode
                    []
                    [(EndOfLine)
                    (EndOfLine)]
                )
                []
                [(Declaration
                    (AttrType
                        TypeType
                        []
                        ()
                        t
                        None
                    )
                    []
                    [(fst
                    []
                    []
                    ()
                    ()
                    None
                    ())]
                    ()
                )
                (Declaration
                    (AttrType
                        TypeType
                        []
                        ()
                        t
                        None
                    )
                    []
                    [(snd
                    []
                    []
                    ()
                    ()
                    None
                    ())]
                    ()
                )]
                []
            )]
            [(Function
                get_fst
                [(p)]
                []
                r
                ()
                (TriviaNode
                    []
                    [(EndOfLine)
                    (EndOfLine)]
                )
                []
                []
                []
                [(Declaration
                    (AttrType
                        TypeType
                        []
                        ()
                        tuple
                        None
                    )
                    [(AttrIntent
                        In
                    )]
                    [(p
                    []
                    []
                    ()
                    ()
                    None
                    ())]
                    ()
                )
                (Declaration
                    (AttrType
                        TypeType
                        []
                        ()
                        t
                        None
                    )
                    []
                    [(r
                    []
                    []
                    ()
                    ()
                    None
                    ())]
                    ()
                )]
                [(Assignment
                    0
                    r
                    fst [(p
                    [])]
                    ()
                )]
                []
                []
            )
            (Function
                get_snd
                [(p)]
                []
                r
                ()
                (TriviaNode
                    []
                    [(EndOfLine)
                    (EndOfLine)]
                )
                []
                []
                []
                [(Declaration
                    (AttrType
                        TypeType
                        []
                        ()
                        tuple
                        None
                    )
                    [(AttrIntent
                        In
                    )]
                    [(p
                    []
                    []
                    ()
                    ()
                    None
                    ())]
                    ()
                )
                (Declaration
                    (AttrType
                        TypeType
                        []
                        ()
                        t
                        None
                    )
                    []
                    [(r
                    []
                    []
                    ()
                    ()
                    None
                    ())]
                    ()
                )]
                [(Assignment
                    0
                    r
                    snd [(p
                    [])]
                    ()
                )]
                []
                []
            )]
        )]
        []
        [(Subroutine
            test_template
            []
            []
            ()
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
            []
            []
            []
            [(Instantiate
                struct_t
                [(AttrType
                    TypeInteger
                    []
                    ()
                    ()
                    None
                )]
                [(UseSymbol
                    tuple
                    int_tuple
                )
                (UseSymbol
                    get_fst
                    get_int_fst
                )
                (UseSymbol
                    get_snd
                    get_int_snd
                )]
            )
            (Instantiate
                struct_t
                [(AttrType
                    TypeReal
                    []
                    ()
                    ()
                    None
                )]
                [(UseSymbol
                    tuple
                    real_tuple
                )
                (UseSymbol
                    get_fst
                    get_real_fst
                )
                (UseSymbol
                    get_snd
                    get_real_snd
                )]
            )
            (Declaration
                (AttrType
                    TypeType
                    []
                    ()
                    int_tuple
                    None
                )
                []
                [(ti
                []
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeType
                    []
                    ()
                    real_tuple
                    None
                )
                []
                [(tr
                []
                []
                ()
                ()
                None
                ())]
                ()
            )]
            [(Assignment
                0
                fst [(ti
                [])]
                1
                ()
            )
            (Print
                0
                ()
                [(String "First element: ")
                (FuncCallOrArray
                    get_int_fst
                    []
                    [(()
                    ti
                    ()
                    0)]
                    []
                    []
                    []
                )]
                ()
            )
            (Assignment
                0
                snd [(ti
                [])]
                2
                ()
            )
            (Print
                0
                ()
                [(String "Second element: ")
                (FuncCallOrArray
                    get_int_snd
                    []
                    [(()
                    ti
                    ()
                    0)]
                    []
                    []
                    []
                )]
                ()
            )
            (Assignment
                0
                fst [(tr
                [])]
                (Real "1.")
                ()
            )
            (Print
                0
                ()
                [(String "First element: ")
                (FuncCallOrArray
                    get_real_fst
                    []
                    [(()
                    tr
                    ()
                    0)]
                    []
                    []
                    []
                )]
                ()
            )
            (Assignment
                0
                snd [(tr
                [])]
                (Real "2.")
                ()
            )
            (Print
                0
                ()
                [(String "Second element: ")
                (FuncCallOrArray
                    get_real_snd
                    []
                    [(()
                    tr
                    ()
                    0)]
                    []
                    []
                    []
                )]
                ()
            )]
            []
            []
        )]
    )
    (Program
        template_struct_01
        ()
        [(Use
            []
            template_struct_01_m
            []
            .false.
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
        )]
        [(ImplicitNone
            []
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
        )]
        []
        [(SubroutineCall
            0
            test_template
            []
            []
            []
            []
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
        )]
        []
    )]
)
