title: Compiler error when adapting struct with BOOST_FUSION_ADAPT_STRUCT
body: <pre><code>#include &lt;iostream&gt;
  #include &lt;vector&gt;
  #include &lt;string&gt;
  #include &lt;boost/spirit/include/qi.hpp&gt;
  #include &lt;boost/fusion/include/adapt_struct.hpp&gt;
  #include &lt;boost/fusion/include/io.hpp&gt;
  
  namespace qi = boost::spirit::qi;
  
  
  struct VectorWrapper
  {
      std::vector&lt;std::string&gt; data;
  };
  
  BOOST_FUSION_ADAPT_STRUCT(
      VectorWrapper,
      (std::vector&lt;std::string&gt;, data)
  )
  
  int main ()
  {
      std::string input("aa aa aa");
      std::string::iterator strbegin = input.begin();
  
      qi::rule&lt;std::string::iterator, VectorWrapper(), qi::space_type &gt; testRule = 
          +(qi::string("aa"));
  
      VectorWrapper result;
      bool ok = qi::phrase_parse(
              strbegin, 
              input.end(),
              testRule,
              qi::space,                  
              result);                               
  
      if (ok &amp;&amp; strbegin == input.end()) {
          std::cout &lt;&lt; result.data.size();
          for (int i = 0; i &lt; result.data.size(); ++i) {
              std::cout &lt;&lt; result.data[i] &lt;&lt; " ";
          }
      } else {
          std::cout &lt;&lt; "fail" &lt;&lt; std::endl;
          std::cout &lt;&lt; std::string(strbegin, input.end()) &lt;&lt; std::endl;
      }
  }
  </code></pre>
  
  <p>I need help to find out problem in this code. Compiler complains about <code>type</code> in <code>VectorWrapper</code> struct but shouldn't <code>BOOST_FUSION_ADAPT_STRUCT</code> add it?</p>
  
  <p>After adding dummy field (<a href="https://stackoverflow.com/questions/19823413/spirit-qi-attribute-propagation-issue-with-single-member-struct">from this answer</a>)I am getting the same error:</p>
  
  <pre><code>struct VectorWrapper
  {
      std::vector&lt;std::string&gt; data;
      qi::unused_type dummy;
  };
  
  BOOST_FUSION_ADAPT_STRUCT(
      VectorWrapper,
      (std::vector&lt;std::string&gt;, data)
      (qi::unused_type, dummy)
  )
  </code></pre>
  
  <p>The error message:</p>
  
  <pre><code>In file included from /usr/local/include/boost/spirit/home/support/string_traits.hpp:16:0,
                   from /usr/local/include/boost/spirit/home/support/nonterminal/expand_arg.hpp:20,
                   from /usr/local/include/boost/spirit/home/support/context.hpp:18,
                   from /usr/local/include/boost/spirit/home/qi/domain.hpp:18,
                   from /usr/local/include/boost/spirit/home/qi/meta_compiler.hpp:15,
                   from /usr/local/include/boost/spirit/home/qi/action/action.hpp:14,
                   from /usr/local/include/boost/spirit/home/qi/action.hpp:14,
                   from /usr/local/include/boost/spirit/home/qi.hpp:14,
                   from /usr/local/include/boost/spirit/include/qi.hpp:16,
                   from main.cpp:4:
  /usr/local/include/boost/spirit/home/support/container.hpp: In instantiation of ‘boost::spirit::traits::container_value&lt;VectorWrapper, void&gt;’:
  /usr/local/include/boost/spirit/home/qi/detail/pass_container.hpp:296:66:   instantiated from ‘bool boost::spirit::qi::detail::pass_container&lt;F, Attr, Sequence&gt;::dispatch_attribute(const Component&amp;, mpl_::true_) const [with Component = boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt;, F = boost::spirit::qi::detail::fail_function&lt;__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt; &gt;, Attr = VectorWrapper, Sequence = mpl_::bool_&lt;false&gt;, mpl_::true_ = mpl_::bool_&lt;true&gt;]’
  /usr/local/include/boost/spirit/home/qi/detail/pass_container.hpp:331:61:   instantiated from ‘bool boost::spirit::qi::detail::pass_container&lt;F, Attr, Sequence&gt;::operator()(const Component&amp;) const [with Component = boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt;, F = boost::spirit::qi::detail::fail_function&lt;__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt; &gt;, Attr = VectorWrapper, Sequence = mpl_::bool_&lt;false&gt;]’
  /usr/local/include/boost/spirit/home/qi/operator/plus.hpp:63:13:   instantiated from ‘bool boost::spirit::qi::plus&lt;Subject&gt;::parse_container(F) const [with F = boost::spirit::qi::detail::pass_container&lt;boost::spirit::qi::detail::fail_function&lt;__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt; &gt;, VectorWrapper, mpl_::bool_&lt;false&gt; &gt;, Subject = boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt;]’
  /usr/local/include/boost/spirit/home/qi/operator/plus.hpp:85:13:   instantiated from ‘bool boost::spirit::qi::plus&lt;Subject&gt;::parse(Iterator&amp;, const Iterator&amp;, Context&amp;, const Skipper&amp;, Attribute&amp;) const [with Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, Context = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, Skipper = boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, Attribute = VectorWrapper, Subject = boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt;]’
  /usr/local/include/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp:43:54:   instantiated from ‘bool boost::spirit::qi::detail::parser_binder&lt;Parser, Auto&gt;::call(Iterator&amp;, const Iterator&amp;, Context&amp;, const Skipper&amp;, mpl_::false_) const [with Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, Skipper = boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, Context = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, Parser = boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, Auto = mpl_::bool_&lt;false&gt;, mpl_::false_ = mpl_::bool_&lt;false&gt;]’
  /usr/local/include/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp:53:67:   [ skipping 3 instantiation contexts ]
  /usr/local/include/boost/function/function_template.hpp:722:7:   instantiated from ‘boost::function4&lt;R, T1, T2, T3, T4&gt;::function4(Functor, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, int&gt;::type) [with Functor = boost::spirit::qi::detail::parser_binder&lt;boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, mpl_::bool_&lt;false&gt; &gt;, R = bool, T0 = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T1 = const __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T2 = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;&amp;, T3 = const boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;&amp;, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, int&gt;::type = int]’
  /usr/local/include/boost/function/function_template.hpp:1069:16:   instantiated from ‘boost::function&lt;R(T0, T1, T2, T3)&gt;::function(Functor, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, int&gt;::type) [with Functor = boost::spirit::qi::detail::parser_binder&lt;boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, mpl_::bool_&lt;false&gt; &gt;, R = bool, T0 = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T1 = const __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T2 = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;&amp;, T3 = const boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;&amp;, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, int&gt;::type = int]’
  /usr/local/include/boost/function/function_template.hpp:1124:5:   instantiated from ‘typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, boost::function&lt;R(T0, T1, T2, T3)&gt;&amp;&gt;::type boost::function&lt;R(T0, T1, T2, T3)&gt;::operator=(Functor) [with Functor = boost::spirit::qi::detail::parser_binder&lt;boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, mpl_::bool_&lt;false&gt; &gt;, R = bool, T0 = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T1 = const __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T2 = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;&amp;, T3 = const boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;&amp;, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, boost::function&lt;R(T0, T1, T2, T3)&gt;&amp;&gt;::type = boost::function&lt;bool(__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, const __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;&amp;, const boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;&amp;)&gt;&amp;]’
  /usr/local/include/boost/spirit/home/qi/nonterminal/rule.hpp:182:13:   instantiated from ‘static void boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt;::define(boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt;&amp;, const Expr&amp;, mpl_::true_) [with Auto = mpl_::bool_&lt;false&gt;, Expr = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::unary_plus, boost::proto::argsns_::list1&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::terminal_ex&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::string, boost::spirit::char_encoding::standard&gt;, boost::fusion::vector1&lt;const char (&amp;)[3]&gt; &gt; &gt;, 0l&gt;&amp;&gt;, 1l&gt;, Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, T1 = VectorWrapper(), T2 = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, 0l&gt;, T3 = boost::spirit::unused_type, T4 = boost::spirit::unused_type, boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt; = boost::spirit::qi::rule&lt;__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, VectorWrapper(), boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, 0l&gt; &gt;, mpl_::true_ = mpl_::bool_&lt;true&gt;]’
  /usr/local/include/boost/spirit/home/qi/nonterminal/rule.hpp:191:13:   instantiated from ‘boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt;::rule(const Expr&amp;, const string&amp;) [with Expr = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::unary_plus, boost::proto::argsns_::list1&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::terminal_ex&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::string, boost::spirit::char_encoding::standard&gt;, boost::fusion::vector1&lt;const char (&amp;)[3]&gt; &gt; &gt;, 0l&gt;&amp;&gt;, 1l&gt;, Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, T1 = VectorWrapper(), T2 = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, 0l&gt;, T3 = boost::spirit::unused_type, T4 = boost::spirit::unused_type, std::string = std::basic_string&lt;char&gt;]’
  main.cpp:27:27:   instantiated from here
  /usr/local/include/boost/spirit/home/support/container.hpp:116:12: error: no type named ‘value_type’ in ‘struct VectorWrapper’
  In file included from /usr/local/include/boost/spirit/home/qi/operator/kleene.hpp:20:0,
                   from /usr/local/include/boost/spirit/home/qi/directive/repeat.hpp:18,
                   from /usr/local/include/boost/spirit/home/qi/directive.hpp:23,
                   from /usr/local/include/boost/spirit/home/qi.hpp:19,
                   from /usr/local/include/boost/spirit/include/qi.hpp:16,
                   from main.cpp:4:
  /usr/local/include/boost/spirit/home/qi/detail/pass_container.hpp: In member function ‘bool boost::spirit::qi::detail::pass_container&lt;F, Attr, Sequence&gt;::dispatch_attribute(const Component&amp;, mpl_::true_) const [with Component = boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt;, F = boost::spirit::qi::detail::fail_function&lt;__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt; &gt;, Attr = VectorWrapper, Sequence = mpl_::bool_&lt;false&gt;, mpl_::true_ = mpl_::bool_&lt;true&gt;]’:
  /usr/local/include/boost/spirit/home/qi/detail/pass_container.hpp:331:61:   instantiated from ‘bool boost::spirit::qi::detail::pass_container&lt;F, Attr, Sequence&gt;::operator()(const Component&amp;) const [with Component = boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt;, F = boost::spirit::qi::detail::fail_function&lt;__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt; &gt;, Attr = VectorWrapper, Sequence = mpl_::bool_&lt;false&gt;]’
  /usr/local/include/boost/spirit/home/qi/operator/plus.hpp:63:13:   instantiated from ‘bool boost::spirit::qi::plus&lt;Subject&gt;::parse_container(F) const [with F = boost::spirit::qi::detail::pass_container&lt;boost::spirit::qi::detail::fail_function&lt;__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt; &gt;, VectorWrapper, mpl_::bool_&lt;false&gt; &gt;, Subject = boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt;]’
  /usr/local/include/boost/spirit/home/qi/operator/plus.hpp:85:13:   instantiated from ‘bool boost::spirit::qi::plus&lt;Subject&gt;::parse(Iterator&amp;, const Iterator&amp;, Context&amp;, const Skipper&amp;, Attribute&amp;) const [with Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, Context = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, Skipper = boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, Attribute = VectorWrapper, Subject = boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt;]’
  /usr/local/include/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp:43:54:   instantiated from ‘bool boost::spirit::qi::detail::parser_binder&lt;Parser, Auto&gt;::call(Iterator&amp;, const Iterator&amp;, Context&amp;, const Skipper&amp;, mpl_::false_) const [with Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, Skipper = boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, Context = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, Parser = boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, Auto = mpl_::bool_&lt;false&gt;, mpl_::false_ = mpl_::bool_&lt;false&gt;]’
  /usr/local/include/boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp:53:67:   instantiated from ‘bool boost::spirit::qi::detail::parser_binder&lt;Parser, Auto&gt;::operator()(Iterator&amp;, const Iterator&amp;, Context&amp;, const Skipper&amp;) const [with Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, Skipper = boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, Context = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;, Parser = boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, Auto = mpl_::bool_&lt;false&gt;]’
  /usr/local/include/boost/function/function_template.hpp:132:42:   [ skipping 2 instantiation contexts ]
  /usr/local/include/boost/function/function_template.hpp:722:7:   instantiated from ‘boost::function4&lt;R, T1, T2, T3, T4&gt;::function4(Functor, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, int&gt;::type) [with Functor = boost::spirit::qi::detail::parser_binder&lt;boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, mpl_::bool_&lt;false&gt; &gt;, R = bool, T0 = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T1 = const __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T2 = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;&amp;, T3 = const boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;&amp;, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, int&gt;::type = int]’
  /usr/local/include/boost/function/function_template.hpp:1069:16:   instantiated from ‘boost::function&lt;R(T0, T1, T2, T3)&gt;::function(Functor, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, int&gt;::type) [with Functor = boost::spirit::qi::detail::parser_binder&lt;boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, mpl_::bool_&lt;false&gt; &gt;, R = bool, T0 = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T1 = const __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T2 = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;&amp;, T3 = const boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;&amp;, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, int&gt;::type = int]’
  /usr/local/include/boost/function/function_template.hpp:1124:5:   instantiated from ‘typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, boost::function&lt;R(T0, T1, T2, T3)&gt;&amp;&gt;::type boost::function&lt;R(T0, T1, T2, T3)&gt;::operator=(Functor) [with Functor = boost::spirit::qi::detail::parser_binder&lt;boost::spirit::qi::plus&lt;boost::spirit::qi::literal_string&lt;const char (&amp;)[3], false&gt; &gt;, mpl_::bool_&lt;false&gt; &gt;, R = bool, T0 = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T1 = const __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, T2 = boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;&amp;, T3 = const boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;&amp;, typename boost::enable_if_c&lt;boost::type_traits::ice_not&lt;boost::is_integral&lt;Functor&gt;::value&gt;::value, boost::function&lt;R(T0, T1, T2, T3)&gt;&amp;&gt;::type = boost::function&lt;bool(__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, const __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;&amp;, boost::spirit::context&lt;boost::fusion::cons&lt;VectorWrapper&amp;, boost::fusion::nil&gt;, boost::fusion::vector0&lt;&gt; &gt;&amp;, const boost::spirit::qi::char_class&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;&amp;)&gt;&amp;]’
  /usr/local/include/boost/spirit/home/qi/nonterminal/rule.hpp:182:13:   instantiated from ‘static void boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt;::define(boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt;&amp;, const Expr&amp;, mpl_::true_) [with Auto = mpl_::bool_&lt;false&gt;, Expr = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::unary_plus, boost::proto::argsns_::list1&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::terminal_ex&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::string, boost::spirit::char_encoding::standard&gt;, boost::fusion::vector1&lt;const char (&amp;)[3]&gt; &gt; &gt;, 0l&gt;&amp;&gt;, 1l&gt;, Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, T1 = VectorWrapper(), T2 = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, 0l&gt;, T3 = boost::spirit::unused_type, T4 = boost::spirit::unused_type, boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt; = boost::spirit::qi::rule&lt;__gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, VectorWrapper(), boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, 0l&gt; &gt;, mpl_::true_ = mpl_::bool_&lt;true&gt;]’
  /usr/local/include/boost/spirit/home/qi/nonterminal/rule.hpp:191:13:   instantiated from ‘boost::spirit::qi::rule&lt;Iterator, T1, T2, T3, T4&gt;::rule(const Expr&amp;, const string&amp;) [with Expr = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::unary_plus, boost::proto::argsns_::list1&lt;const boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::terminal_ex&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::string, boost::spirit::char_encoding::standard&gt;, boost::fusion::vector1&lt;const char (&amp;)[3]&gt; &gt; &gt;, 0l&gt;&amp;&gt;, 1l&gt;, Iterator = __gnu_cxx::__normal_iterator&lt;char*, std::basic_string&lt;char&gt; &gt;, T1 = VectorWrapper(), T2 = boost::proto::exprns_::expr&lt;boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term&lt;boost::spirit::tag::char_code&lt;boost::spirit::tag::space, boost::spirit::char_encoding::standard&gt; &gt;, 0l&gt;, T3 = boost::spirit::unused_type, T4 = boost::spirit::unused_type, std::string = std::basic_string&lt;char&gt;]’
  main.cpp:27:27:   instantiated from here
  /usr/local/include/boost/spirit/home/qi/detail/pass_container.hpp:296:66: error: no type named ‘type’ in ‘struct boost::spirit::traits::container_value&lt;VectorWrapper, void&gt;’
  /usr/local/include/boost/spirit/home/qi/detail/pass_container.hpp:309:15: error: no type named ‘type’ in ‘struct boost::spirit::traits::container_value&lt;VectorWrapper, void&gt;’
  make: *** [all] Error 1
  </code></pre>