title: boost::spirit and strict_real_policies fails to parse a too long integer
body: <p>I've to deal with really long integers in text format -- so long that they won't fit into an 32bit int. 
  I need to parse such text into a </p>
  
  <pre><code>boost::variant&lt;int, double&gt;.
  </code></pre>
  
  <p>So if there is a long integer to big for an integer it needs to go into a double. See the example below. It does not parse the name value pair </p>
  
  <pre><code>MUESR1 = 411100000000000. 
  </code></pre>
  
  <p>How can this be fixed?</p>
  
  <pre><code>#include &lt;boost/spirit/include/qi.hpp&gt;
  #include &lt;boost/fusion/include/std_pair.hpp&gt;
  #include &lt;iterator&gt;
  
  
  namespace qi = boost::spirit::qi;
  namespace spirit = boost::spirit;
  namespace ascii = boost::spirit::ascii;
  
  typedef boost::variant&lt;int, double&gt; VALUE;
  typedef std::pair&lt;std::string, VALUE&gt; PAIR;
  typedef std::map&lt;std::string, VALUE&gt; PAIRS;
  template&lt;typename Iterator&gt;
  struct parameters:qi::grammar&lt;Iterator, PAIRS(), ascii::space_type&gt;
  {
      qi::rule&lt;Iterator, std::string(), ascii::space_type&gt; m_sName;
      qi::rule&lt;Iterator, VALUE(), ascii::space_type&gt; m_sValue;
      qi::rule&lt;Iterator, PAIR(), ascii::space_type&gt; m_sNameValue;
      qi::rule&lt;Iterator, PAIRS(), ascii::space_type&gt; m_sRoot;
      qi::real_parser&lt;double, qi::strict_real_policies&lt;double&gt; &gt; m_sReal;
  
      parameters(void)
          :parameters::base_type(m_sRoot)
      {   m_sName %= qi::lexeme[qi::char_("a-zA-Z_") &gt;&gt; *qi::char_("a-zA-z_0-9")];
          m_sValue %= m_sReal | spirit::int_;
          m_sNameValue %= m_sName &gt;&gt; qi::lit('=') &gt;&gt; m_sValue &gt;&gt; -qi::lit('\n');
          m_sRoot %= m_sNameValue &gt;&gt; *m_sNameValue;
      }
  };
  
  
  int main(int, char**)
  {
  static const char s_ap[] = "\
  MUEPH1 = 7.014158 MUEPHW=  -0.3 MUEPWP = 0.23 MUEPHL=  -0.72 MUEPLP = 3.4 MUEPHS = 2.976E-07 MUEPSP = 5 VTMP=  -1.8463 WVTH0=  -1.01558 MUESR0 = 0.01256478438899837 MUESR1 = 411100000000000\n\
  MUEPHW2 = 0 MUEPWP2 = 1\n";
      parameters&lt;const char*&gt; sGrammar;
      const char *pIter = s_ap;
      const char *const pEnd = s_ap + sizeof s_ap - 1;
      PAIRS sValues;
      if (phrase_parse(pIter, pEnd, sGrammar, boost::spirit::ascii::space, sValues) &amp;&amp; pIter == pEnd)
      {   std::cerr &lt;&lt; "parsing successful!" &lt;&lt; std::endl;
          for (const auto &amp;r : sValues)
              std::cout &lt;&lt; r.first &lt;&lt; "=" &lt;&lt; std::scientific &lt;&lt; r.second &lt;&lt; std::endl;
      }
      else
      {   std::cerr &lt;&lt; "parsing failed!" &lt;&lt; std::endl;
          std::cerr &lt;&lt; pIter &lt;&lt; std::endl;
      }
  }
  </code></pre>