在业力规则中使用数字生成器时,uint_not_usable_without_attribute静态断言失败

时间:2018-10-23 15:34:46

标签: c++ boost boost-spirit

我似乎无法在因果规则中使用数字助推因果发生器,这似乎是因为我为规则使用了错误的迭代器模板参数:

#include <iostream>
#include <iterator>
#include <string>
#include <boost/spirit/include/karma.hpp>

template <typename OutputIterator>
boost::spirit::karma::rule<OutputIterator, uint_fast16_t>
        int_rule{
    boost::spirit::karma::int_
};

int main(int argc, char* argv[])
{
    std::string output;

    boost::spirit::karma::generate(std::back_inserter(output),
            int_rule<std::back_insert_iterator<std::string>>, 5);

    std::cout << "\"" << output << "\"\n";

    return 0;
}   

使用clang和gcc失败

  

错误:由于要求而导致static_assert失败   '!boost :: is_same

     
    

,int_ <15>,unused_type>,output_iterator>,int_ <15>,     未使用类型>> ::值'“ int_not_usable_without_attribute”                 BOOST_SPIRIT_ASSERT_FAIL(OutputIterator,int_not_usable_without_attribute,());

  

直接通过boost::spirit::karma::generate(std::back_inserter(output), boost::spirit::karma::int_, 5);使用生成器时,可以编译并运行,那么我在做什么错呢?为了将数字提升业力生成器封装到业力生成器规则中,我必须使用哪个迭代器而不是std::back_insert_iterator<std::string>

1 个答案:

答案 0 :(得分:1)

您忘记了规则定义中的括号。应该是uint_fast16_t(),而不是the rule documentationuint_fast16_t部分中所述的普通Signature