boostorg / phoenix

Boost.org phoenix module
http://boost.org/libs/phoenix
30 stars 46 forks source link

VC7.1 errors when including `<boost/phoenix.hpp>` #91

Open billw2012 opened 4 years ago

billw2012 commented 4 years ago

I couldn't see any explicit mention of what compilers are supported or tested.

Errors below from boost 1.55 (I get a different set of errors in 1.72, they are at the bottom). Problem is with the definition of the placeholders it appears.

Code is just:

#include <boost/phoenix.hpp>

Command line: cl.exe "test.cpp" /Fo"test.obj" /GR /MD /Gy /W3 /EHsc /Gd /Gm- /arch:SSE2 /Zm200 /DWIN32 /D_WINDOWS /D_USRDLL /I"Microsoft Visual C++ Toolkit 2003/include" /I"Microsoft SDKs\Windows\v6.0/Include" /I"Microsoft SDKs\Windows\v6.0/Include/mfc" /nologo /Z7 /Od /RTC1 /D_DEBUG /c /I"boost_1_55_0"

Output:

test.cpp
boost\proto\detail\preprocessed\poly_function_funop.hpp(12) : error C2976: 'boost::proto::functional::has_env_var<Key>::impl' : too few template arguments
        with
        [
            Key=boost::proto::envns_::transforms_type
        ]
        boost\proto\transform\env.hpp(254) : see declaration of 'boost::proto::functional::has_env_var<Key>::impl'
        with
        [
            Key=boost::proto::envns_::transforms_type
        ]
        boost\utility\result_of.hpp(187) : see reference to class template instantiation 'boost::proto::detail::poly_function<Derived>::result<Sig>' being compiled
        with
        [
            Derived=boost::proto::functional::has_env_var<boost::proto::envns_::transforms_type>,
            Sig=boost::proto::functional::has_env_var<boost::proto::envns_::transforms_type> (boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type )
        ]
        boost\utility\result_of.hpp(194) : see reference to class template instantiation 'boost::detail::result_of_nested_result<F,FArgs>' being compiled
        with
        [
            F=boost::remove_cv<boost::proto::functional::has_env_var<boost::proto::envns_::transforms_type>>::type,
            FArgs=boost::proto::functional::has_env_var<boost::proto::envns_::transforms_type> (boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type )
        ]
        boost\utility\detail\result_of_iterate.hpp(37) : see reference to class template instantiation 'boost::detail::tr1_result_of_impl<F,FArgs,HasResultType>' being compiled
        with
        [
            F=boost::remove_cv<boost::proto::functional::has_env_var<boost::proto::envns_::transforms_type>>::type,
            FArgs=boost::remove_cv<boost::proto::functional::has_env_var<boost::proto::envns_::transforms_type>>::type (boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type ),
            HasResultType=false
        ]
        boost\utility\detail\result_of_iterate.hpp(160) : see reference to class template instantiation 'boost::tr1_result_of<F>' being compiled
        with
        [
            F=boost::proto::functional::has_env_var<boost::proto::envns_::transforms_type> (boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type )
        ]
        boost\proto\transform\env.hpp(367) : see reference to class template instantiation 'boost::result_of<F>' being compiled
        with
        [
            F=boost::proto::functional::has_env_var<boost::proto::envns_::transforms_type> (boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type )
        ]
        boost\proto\transform\when.hpp(189) : see reference to class template instantiation 'boost::proto::result_of::has_env_var<Env,Key>' being compiled
        with
        [
            Env=boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type ,
            Key=boost::proto::envns_::transforms_type
        ]
        boost\proto\matches.hpp(762) : see reference to class template instantiation 'boost::proto::when<Grammar,PrimitiveTransform>::impl<Expr,State,Data>' being compiled
        with
        [
            Grammar=boost::phoenix::rule::argument,
            PrimitiveTransform=boost::proto::external_transform,
            Expr=const boost::phoenix::actor<boost::phoenix::expression::terminal<boost::phoenix::argument<1>>::base_type>::proto_base_expr &,
            State=boost::phoenix::result_of::env<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type ,
            Data=boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type 
        ]
        boost\proto\matches.hpp(836) : see reference to class template instantiation 'boost::proto::or_<G0,G1,G2>::impl<Expr,State,Data>' being compiled
        with
        [
            G0=boost::phoenix::enable_rule<boost::phoenix::rule::argument,void>,
            G1=boost::phoenix::enable_rule<boost::phoenix::rule::custom_terminal,void>,
            G2=boost::phoenix::enable_rule<boost::phoenix::rule::terminal,void>,
            Expr=const boost::phoenix::actor<boost::phoenix::expression::terminal<boost::phoenix::argument<1>>::base_type>::proto_base_expr &,
            State=boost::phoenix::result_of::env<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type ,
            Data=boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type 
        ]
        boost\phoenix\core\meta_grammar.hpp(66) : see reference to class template instantiation 'boost::proto::switch_<Cases>::impl<Expr,State,Data>' being compiled
        with
        [
            Cases=boost::phoenix::meta_grammar,
            Expr=const boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::phoenix::argument<1>>,0> &,
            State=boost::phoenix::result_of::env<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type,
            Data=boost::phoenix::result_of::actions<boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>>::type
        ]
        boost\phoenix\core\is_nullary.hpp(123) : see reference to class template instantiation 'boost::phoenix::evaluator::impl<Expr,State,Data>' being compiled
        with
        [
            Expr=const boost::phoenix::actor<boost::phoenix::expression::terminal<boost::phoenix::argument<1>>::base_type>::proto_base_expr &,
            State=boost::phoenix::vector2<boost::mpl::true_,boost::phoenix::is_nullary>,
            Data=boost::proto::envns_::empty_env
        ]
        boost\phoenix\core\detail\preprocessed\actor_result_of_10.hpp(34) : see reference to class template instantiation 'boost::phoenix::result_of::is_nullary<Expr>' being compiled
        with
        [
            Expr=boost::phoenix::actor<boost::phoenix::expression::terminal<boost::phoenix::argument<1>>::base_type>::proto_base_expr
        ]
        boost\phoenix\core\actor.hpp(239) : see reference to class template instantiation 'boost::phoenix::result_of::actor<Expr>' being compiled
        with
        [
            Expr=boost::phoenix::actor<boost::phoenix::expression::terminal<boost::phoenix::argument<1>>::base_type>::proto_base_expr
        ]
        boost\phoenix\core\preprocessed\argument_predefined_10.hpp(13) : see reference to class template instantiation 'boost::phoenix::actor<Expr>' being compiled
        with
        [
            Expr=boost::phoenix::expression::terminal<boost::phoenix::argument<1>>::base_type
        ]
boost\proto\detail\preprocessed\poly_function_funop.hpp(12) : error C2955: 'boost::proto::functional::has_env_var<Key>::impl' : use of class template requires template argument list
        with
        [
            Key=boost::proto::envns_::transforms_type
        ]
        boost\proto\transform\env.hpp(254) : see declaration of 'boost::proto::functional::has_env_var<Key>::impl'
        with
        [
            Key=boost::proto::envns_::transforms_type
        ]
boost\proto\transform\env.hpp(368) : fatal error C1903: unable to recover from previous error(s); stopping compilation

Errors I get with 1.72:

test.cpp
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(35) : error C2975: 'boost::fusion::detail::result_of_it_fold' : invalid template argument for 'function-parameter', compile-time evaluatable constant expression expected
        boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(27) : see declaration of 'boost::fusion::detail::result_of_it_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(37) : error C3855: 'boost::fusion::detail::result_of_it_fold': template parameter 'SeqSize' is incompatible with the declaration
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(37) : error C2976: 'boost::fusion::detail::result_of_it_fold' : too few template arguments
        boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(37) : see declaration of 'boost::fusion::detail::result_of_it_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(65) : error C2976: 'boost::fusion::detail::result_of_it_fold' : too few template arguments
        boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(65) : see declaration of 'boost::fusion::detail::result_of_it_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(68) : error C2955: 'boost::fusion::detail::result_of_it_fold' : use of class template requires template argument list
        boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(65) : see declaration of 'boost::fusion::detail::result_of_it_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(68) : error C2039: 'type' : is not a member of 'boost::fusion::detail::result_of_it_fold'
        boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(65) : see declaration of 'boost::fusion::detail::result_of_it_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(74) : error C2146: syntax error : missing ';' before identifier 'it_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(74) : error C2433: 'type' : 'inline' not permitted on data declarations
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(74) : error C2501: 'type' : missing storage-class or type specifiers
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(74) : error C2061: syntax error : identifier 'It'
boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(88) : error C3203: 'result_of_it_fold' : class template invalid as template argument for template parameter 'T', expected a real type
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(34) : error C2975: 'boost::fusion::detail::result_of_it_reverse_fold' : invalid template argument for 'function-parameter', compile-time evaluatable constant expression expected
        boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(26) : see declaration of 'boost::fusion::detail::result_of_it_reverse_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(36) : error C3855: 'boost::fusion::detail::result_of_it_reverse_fold': template parameter 'SeqSize' is incompatible with the declaration
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(36) : error C2976: 'boost::fusion::detail::result_of_it_reverse_fold' : too few template arguments
        boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(36) : see declaration of 'boost::fusion::detail::result_of_it_reverse_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(64) : error C2976: 'boost::fusion::detail::result_of_it_reverse_fold' : too few template arguments
        boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(64) : see declaration of 'boost::fusion::detail::result_of_it_reverse_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(67) : error C2955: 'boost::fusion::detail::result_of_it_reverse_fold' : use of class template requires template argument list
        boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(64) : see declaration of 'boost::fusion::detail::result_of_it_reverse_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(67) : error C2039: 'type' : is not a member of 'boost::fusion::detail::result_of_it_reverse_fold'
        boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(64) : see declaration of 'boost::fusion::detail::result_of_it_reverse_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(73) : error C2146: syntax error : missing ';' before identifier 'it_reverse_fold'
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(73) : error C2433: 'type' : 'inline' not permitted on data declarations
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(73) : error C2501: 'type' : missing storage-class or type specifiers
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(73) : error C2086: 'int boost::fusion::detail::type' : redefinition
        boost\fusion\algorithm\iteration\detail\preprocessed\fold.hpp(74) : see declaration of 'boost::fusion::detail::type'
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(73) : error C2061: syntax error : identifier 'It'
boost\fusion\algorithm\iteration\detail\preprocessed\reverse_fold.hpp(87) : error C3203: 'result_of_it_reverse_fold' : class template invalid as template argument for template parameter 'T', expected a real type
Microsoft Visual C++ Toolkit 2003\include\ostream(604) : fatal error C1903: unable to recover from previous error(s); stopping compilation
djowel commented 4 years ago

Wow. Should we still support VC7.1?