Boost logo

Boost :

From: Peder Holt (peder.holt_at_[hidden])
Date: 2006-02-23 13:27:18


In confix_parser_gen:
Adding another level of indirection solves the problem:

template<typename StartT, typename ExprT, typename EndT>
confix_parser<
            typename as_parser<StartT>::type, <- VC7.1 ICEs on these
            typename as_parser<ExprT>::type,
            typename as_parser<EndT>::type,
            typename as_parser<ExprT>::type::parser_category_t,
            NestedT,
            LexemeT
>
    operator()(
        StartT const &start_, ExprT const &expr_, EndT const &end_) const

Filtering the confix_parser into type-generating template,
result_type, solves this ICE.

    template<typename StartT, typename ExprT, typename EndT>
    struct result_type {
        typedef confix_parser<
            typename as_parser<StartT>::type,
            typename as_parser<ExprT>::type,
            typename as_parser<EndT>::type,
            typename as_parser<ExprT>::type::parser_category_t,
            NestedT,
            LexemeT
> type;
    };

    template<typename StartT, typename ExprT, typename EndT>
    typename result_type<StartT,ExprT,EndT>::type
    operator()(
        StartT const &start_, ExprT const &expr_, EndT const &end_) const

Now rule_parser_1_1 passes without problems.
Attached is a patch with this fix.

Regards,
Peder




Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk