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