[Boost-bugs] [Boost C++ Libraries] #10040: Incompatibility headers spirit::qi and log

Subject: [Boost-bugs] [Boost C++ Libraries] #10040: Incompatibility headers spirit::qi and log
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-05-11 16:34:08


#10040: Incompatibility headers spirit::qi and log
------------------------------+---------------------
 Reporter: wixdesq@… | Owner: andysem
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: log
  Version: Boost 1.55.0 | Severity: Problem
 Keywords: |
------------------------------+---------------------
 Hi,

 I'm using msvc 12.0 with boost built in amd 64 mode. I get an error when
 the headers :
 {{{#!c++
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/qi_numeric.hpp>
 }}}
 are present with these headers :
 {{{#!c++
 #include <boost/log/core.hpp>
 #include <boost/log/expressions.hpp>
 }}}


 Well, I wrote my little configuration parser using spirit::qi, and it was
 fine. It worked nicely and converted my strings into integers when needed.
 But today I wanted to add a log system to my code, and wanted to use
 boost::log. I followed the tutorial, and only some headers worked on their
 own :
 {{{#!c++
 #include <boost/log/sources/severity_logger.hpp>
 #include <boost/log/trivial.hpp>
 }}}

 The output of cl.exe : (sorry, it's in french)
 {{{#!c++
 1> main.cpp
 1>D:\Code\lib\boost_1_55_0\boost/phoenix/version.hpp(16): warning C4005:
 'BOOST_PHOENIX_VERSION' : redéfinition de macro
 1>
 D:\Code\lib\boost_1_55_0\boost/spirit/home/phoenix/version.hpp(16) : voir
 la définition précédente de 'BOOST_PHOENIX_VERSION'
 1>D:\Code\lib\boost_1_55_0\boost/phoenix/core/limits.hpp(26): warning
 C4005: 'PHOENIX_LIMIT' : redéfinition de macro
 1>
 D:\Code\lib\boost_1_55_0\boost/spirit/home/phoenix/core/limits.hpp(13) :
 voir la définition précédente de 'PHOENIX_LIMIT'
 1>D:\Code\lib\boost_1_55_0\boost/phoenix/core/is_actor.hpp(28): error
 C2977: 'boost::phoenix::is_actor' : nombre d'arguments modèle trop élevé
 1>
 D:\Code\lib\boost_1_55_0\boost/spirit/home/phoenix/core/is_actor.hpp(23) :
 voir la déclaration de 'boost::phoenix::is_actor'
 1>D:\Code\lib\boost_1_55_0\boost/phoenix/core/is_actor.hpp(28): fatal
 error C1903: impossible de récupérer à partir des erreurs précédentes ;
 arrêt de la compilation
 1> log.cpp
 1>D:\Code\lib\boost_1_55_0\boost/proto/operators.hpp(295): warning C4180:
 qualificateur appliqué au type fonction n'a pas de sens ; ignoré
 1> src\log.cpp(114) : voir la référence à l'instanciation de la
 fonction modèle 'const boost::phoenix::actor<Expr>
 boost::proto::exprns_::operator <<<const
 boost::phoenix::actor<boost::proto::exprns_::expr<Tag,Args,2>>,std::ios_base&(std::ios_base
 &)>(Left &&,Right (__cdecl &&))' en cours de compilation
 1> with
 1> [
 1>
 Expr=boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::phoenix::argument<2>>,0>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::ios_base
 &(__cdecl *)(std::ios_base
 &)>,0>>>,2>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::_Smanip<std::streamsize>>,0>>>,2>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::_Fillobj<char>>,0>>>,2>>,boost::log::v2s_mt_nt5::expressions::attribute_actor<unsigned
 int,boost::log::v2s_mt_nt5::fallback_to_none,tag::line_id,boost::phoenix::actor>>,2>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::ios_base
 &(__cdecl &)(std::ios_base &)>,0>>>,2>
 1> , Tag=boost::proto::tagns_::tag::shift_left
 1> ,
 Args=boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::phoenix::argument<2>>,0>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::ios_base
 &(__cdecl *)(std::ios_base
 &)>,0>>>,2>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::_Smanip<std::streamsize>>,0>>>,2>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::_Fillobj<char>>,0>>>,2>>,boost::log::v2s_mt_nt5::expressions::attribute_actor<unsigned
 int,boost::log::v2s_mt_nt5::fallback_to_none,tag::line_id,boost::phoenix::actor>>
 1> , Left=const
 boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left,boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::phoenix::argument<2>>,0>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::ios_base
 &(__cdecl *)(std::ios_base
 &)>,0>>>,2>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::_Smanip<std::streamsize>>,0>>>,2>>,boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<std::_Fillobj<char>>,0>>>,2>>,boost::log::v2s_mt_nt5::expressions::attribute_actor<unsigned
 int,boost::log::v2s_mt_nt5::fallback_to_none,tag::line_id,boost::phoenix::actor>>,2>>
 1> , Right=std::ios_base &(std::ios_base &)
 1> ]
 }}}

 I tried to find out what was wrong with Phoenix.. I don't really know how
 it works behing the scene, but I read on the web Log is using Phoenix3 ..
 Maybe qi is not using the same version and something goes wrong when
 including both together ... Just making hypothesis ... Anyway this is, I
 think, a bug.

 I added my CL.read.1.log, which contains all the files retreived by msvc
 during the building process.

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/10040>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:16 UTC