2012-04-01 51 views
0

爲什麼會出現這種失敗,編譯G ++ -c filename.cpp:升壓融合編譯失敗時的參數BOOST_FUSION_ADAPT_STRUCT數爲2

#include <boost/config/warning_disable.hpp> 
#include <boost/spirit/include/qi.hpp> 
#include <boost/spirit/include/phoenix_core.hpp> 
#include <boost/spirit/include/phoenix_operator.hpp> 
#include <boost/spirit/include/phoenix_object.hpp> 
#include <boost/fusion/include/adapt_struct.hpp> 
#include <boost/fusion/include/io.hpp> 
#include <boost/lambda/lambda.hpp> 
#include <boost/spirit/include/phoenix_stl.hpp> 
#include <boost/variant/variant.hpp> 
#include <iostream> 

namespace qi = boost::spirit::qi; 
namespace ascii = boost::spirit::ascii; 
namespace phoenix = boost::phoenix; 
namespace lambda = boost::lambda; 

using namespace std; 


struct Intensity 
{ 
    int intensity_; 
}; 

BOOST_FUSION_ADAPT_STRUCT(
    Intensity, 
    (int, intensity_) 
) 

template <typename Iterator> 
struct InternalParser : qi::grammar<Iterator, Intensity(), ascii::space_type> 
{ 
    InternalParser() : InternalParser::base_type(intensity) 
    { 
     intensity %= qi::int_; 
    } 
    qi::rule<Iterator, Intensity(), ascii::space_type> intensity; 
}; 

typedef InternalParser<string::const_iterator> TheParser; 

TheParser parser; 

但是,如果我添加一個新的領域的結構強度它的工作原理:

#include <boost/config/warning_disable.hpp> 
#include <boost/spirit/include/qi.hpp> 
#include <boost/spirit/include/phoenix_core.hpp> 
#include <boost/spirit/include/phoenix_operator.hpp> 
#include <boost/spirit/include/phoenix_object.hpp> 
#include <boost/fusion/include/adapt_struct.hpp> 
#include <boost/fusion/include/io.hpp> 
#include <boost/lambda/lambda.hpp> 
#include <boost/spirit/include/phoenix_stl.hpp> 
#include <boost/variant/variant.hpp> 
#include <iostream> 

namespace qi = boost::spirit::qi; 
namespace ascii = boost::spirit::ascii; 
namespace phoenix = boost::phoenix; 
namespace lambda = boost::lambda; 

using namespace std; 


struct Intensity 
{ 
    int dummy_; 
    int intensity_; 
}; 

BOOST_FUSION_ADAPT_STRUCT(
    Intensity, 
    (int, dummy_) 
    (int, intensity_) 
) 

template <typename Iterator> 
struct InternalParser : qi::grammar<Iterator, Intensity(), ascii::space_type> 
{ 
    InternalParser() : InternalParser::base_type(intensity) 
    { 
     intensity %= qi::int_ >> qi::int_; 
    } 
    qi::rule<Iterator, Intensity(), ascii::space_type> intensity; 
}; 

typedef InternalParser<string::const_iterator> TheParser; 

TheParser parser; 

的克++版本: gcc版本4.4.6 20110731(紅帽4.4.6-3)(GCC)

升壓版本:1.41.0

回答

0

這是一個提升1.41.0的bug。我用1.49.0編譯了第一個例子,它工作。