title: Boost::Spirit compiler error when moving from Boost 1.49 to Boost 1.54
body: <p>I have a simple grammar written in Boost::Spirit defined as follows:</p>
  
  <pre><code>template &lt;typename Iterator_T&gt;
  struct my_grammar :
  qi::grammar&lt;Iterator_T, vector&lt;basic_value_t&gt;(), qi::locals&lt;size_t&gt; &gt;
  {
    my_grammar();
  
    qi::rule&lt;Iterator_T, vector&lt;basic_value_t&gt;(), qi::locals&lt;size_t&gt; &gt; start;
    qi::rule&lt;Iterator_T, basic_value_t(), qi::locals&lt;size_t&gt; &gt; ptuple;
  };
  
  template &lt;typename Iterator_T&gt;
  my_grammar&lt;Iterator_T&gt;::
  my_grammar() : my_grammar&lt;Iterator_T&gt;::base_type(start), start(), ptuple() {
    start = (*ptuple);
  
    ptuple
      = (qi::byte_ &gt;&gt;
         qi::omit[qi::byte_[qi::_a = qi::_1]] &gt;&gt;
         qi::repeat(qi::_a)[qi::byte_])
      ;
  }
  </code></pre>
  
  <p>basic_value_t defined as:</p>
  
  <pre><code>struct basic_value_t {
    uint8_t type;        
    vector&lt;uint8_t&gt; val;
  };
  </code></pre>
  
  <p>is wrapped in BOOST_FUSION_ADAPT_STRUCT as:</p>
  
  <pre><code>BOOST_FUSION_ADAPT_STRUCT
  (
   basic_value_t,
   (std::uint8_t, type)
   (std::vector&lt;std::uint8_t&gt;, val)
  )
  </code></pre>
  
  <p>The grammar is then initialized with the following statement:</p>
  
  <pre><code>my_grammar&lt;vector&lt;uint8_t&gt;::const_iterator&gt; grammar;
  </code></pre>
  
  <p>It is on this line that I get an error when compiling the code with boost 1.54.  However, if I compile the same code using boost 1.49 I do not get an error.  As best I can figure, I have a subtle bug somewhere that is only showing itself when I move to the updated version of Boost.  </p>
  
  <p>The following is the error last portion of a very long error message sequence.</p>
  
  <pre><code>/home/making/Dev/filename.cpp:498:51: required from here
  /usr/include/boost/fusion/view/transform_view/detail/value_of_impl.hpp:36:79: error: no type named ‘type’ in ‘struct boost::mpl::apply&lt;boost::fusion::detail::apply_transform_result&lt;boost::spirit::traits::build_attribute_sequence&lt;boost::fusion::cons&lt;boost::spirit::qi::any_binary_parser&lt;boost::spirit::qi::detail::integer&lt;8&gt;, (boost::spirit::endian::endianness)2, 8&gt;, boost::fusion::cons&lt;boost::spirit::qi::omit_directive&lt;boost::spirit::qi::action&lt;boost::spirit::qi::any_binary_parser&lt;boost::spirit::qi::detail::integer&lt;8&gt;, (boost::spirit::endian::endianness)2, 8&gt;, boost::phoenix::actor&lt;boost::phoenix::composite&lt;boost::phoenix::assign_eval, boost::fusion::vector&lt;boost::spirit::local_variable&lt;0&gt;, boost::spirit::argument&lt;0&gt;, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt; &gt; &gt; &gt;, boost::fusion::cons&lt;boost::spirit::qi::lazy_directive&lt;boost::phoenix::actor&lt;boost::phoenix::composite&lt;boost::phoenix::detail::function_eval&lt;1&gt;, boost::fusion::vector&lt;boost::phoenix::value&lt;boost::spirit::terminal&lt;boost::spirit::tag::repeat&gt; &gt;, boost::spirit::local_variable&lt;0&gt;, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt; &gt;, boost::spirit::qi::any_binary_parser&lt;boost::spirit::qi::detail::integer&lt;8&gt;, (boost::spirit::endian::endianness)2, 8&gt;, boost::spirit::unused_type&gt;, boost::fusion::nil&gt; &gt; &gt;, boost::spirit::context&lt;boost::fusion::cons&lt;ccss_protocols::iec61850::basic_value_t&amp;, boost::fusion::nil&gt;, boost::fusion::vector1&lt;long unsigned int&gt; &gt;, boost::spirit::traits::sequence_attribute_transform, __gnu_cxx::__normal_iterator&lt;const unsigned char*, std::vector&lt;unsigned char&gt; &gt;, boost::spirit::qi::domain&gt;::element_attribute&gt;, boost::spirit::qi::lazy_directive&lt;boost::phoenix::actor&lt;boost::phoenix::composite&lt;boost::phoenix::detail::function_eval&lt;1&gt;, boost::fusion::vector&lt;boost::phoenix::value&lt;boost::spirit::terminal&lt;boost::spirit::tag::repeat&gt; &gt;, boost::spirit::local_variable&lt;0&gt;, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt; &gt;, boost::spirit::qi::any_binary_parser&lt;boost::spirit::qi::detail::integer&lt;8&gt;, (boost::spirit::endian::endianness)2, 8&gt;, boost::spirit::unused_type&gt;, mpl_::na, mpl_::na, mpl_::na, mpl_::na&gt;’
               typedef typename mpl::apply&lt;transform_type, value_type&gt;::type type;
                                                                             ^
  make[2]: *** [CMakeFiles/ccss-protocols-iec61850.dir/src/goose/application-layer.cpp.o] Error 1
  </code></pre>
  
  <p>Thank you in advance for your consideration of this error.</p>