Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.

Boost error only with the Intel compiler

Matthieu_Brucher
Beginner
613 Views

I'm currently trying to port a big application from gcc to the Intel Compiler. I managed to compile it with 13, but I have to do it again for 15, especially since a lot of the code now uses C++11.

Unfortunately, a piece (a Boost::Spirit grammar) that compiled fine with icpc 13 (and gcc and Visual Studio) now fails to compile, and I have absolutely no clue as to what is happening. I managed to limit the code to this grammar:

 

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_function.hpp>

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

//
// expression and operator datatypes
// used for parsing the tree
//
struct binary_op;

struct expr_node
{
  typedef boost::variant<double, std::string,
    boost::recursive_wrapper<expr_node>,
    boost::recursive_wrapper<binary_op>,
    boost::recursive_wrapper<std::vector<expr_node> > > type;

  expr_node()
    : type_str("none") {}

  template <typename Expr>
  expr_node(Expr const& expr, const std::string type_str = "none")
    : expr(expr), type_str(type_str) {}

  type expr;
  std::string type_str;
};

struct binary_op
{
  binary_op(const std::string& op, expr_node const& left, expr_node const& right)
  : op(op), left(left), right(right) {}

  std::string op;
  expr_node left;
  expr_node right;
};

struct expr_node_phx
{
  template <typename T, typename U>
  struct result { typedef expr_node type; };

  expr_node operator()(expr_node const& expr, const std::string& type_str) const
  {
    expr_node e(expr.expr,type_str);
    return e;
  }
};

boost::phoenix::function<expr_node_phx> exnd;

struct binary_op_phx
{
  template <typename S, typename T, typename U>
  struct result { typedef T type; };

  expr_node operator()(const std::string& name, expr_node const& expr, expr_node const& rhs) const
  {
    return expr_node(binary_op(name,expr,rhs));
  }
};

boost::phoenix::function<binary_op_phx> biop;

//
//  grammar for parsing expressions
//
template <typename Iterator>
struct Grammar : qi::grammar<Iterator,expr_node(),ascii::space_type>
{
  Grammar() : Grammar::base_type(log_expr)
  {
    using qi::_val;
    using qi::_1;

      log_expr =      log_term  [_val = _1]
      >> *(    '|' >> log_term  [_val = biop("|",_val,_1)]);
    }

    // auto and basic parsers
    qi::rule<Iterator,expr_node()  ,ascii::space_type> log_expr,log_term;
};

std::string parse()
{
  typedef std::string::const_iterator iterator_type;
  Grammar<iterator_type> ixgrammar;
}

The full error is the following one:

PATH/boost/boost_1_58_0/include/boost/core/enable_if.hpp(36): error: incomplete type is not allowed
    struct enable_if : public enable_if_c<Cond::value, T> {};
                                          ^
          detected during:
            instantiation of class "boost::enable_if<Cond, T> [with Cond=boost::mpl::and_<boost::fusion::traits::is_sequence<boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type,
                      boost::spirit::unused_type, boost::spirit::unused_type>>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval,
                      boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>>>, boost::fusion::nil_>>>,
                      boost::mpl::not_<boost::is_convertible<boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type, boost::spirit::unused_type>>,
                      boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval, boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,
                      boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>>>, boost::fusion::nil_>>, boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>>>, boost::mpl::bool_<true>, boost::mpl::bool_<true>, boost::mpl::bool_<true>>, T=void]" at line 92 of
                      "PATH/boost/boost_1_58_0/include/boost/type_traits/is_convertible.hpp"
            instantiation of class "boost::detail::is_convertible_basic_impl<From, To, false> [with From=boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type,
                      boost::spirit::unused_type, boost::spirit::unused_type>>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval,
                      boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>>>, boost::fusion::nil_>>, To=boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>]" at line 357 of
                      "PATH/boost/boost_1_58_0/include/boost/type_traits/is_convertible.hpp"
            instantiation of class "boost::detail::is_convertible_impl<From, To> [with From=boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type,
                      boost::spirit::unused_type>>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval, boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,
                      boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>>>, boost::fusion::nil_>>, To=boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>]" at line 437 of
                      "PATH/boost/boost_1_58_0/include/boost/type_traits/is_convertible.hpp"
            instantiation of class "boost::detail::is_convertible_impl_dispatch<From, To> [with From=boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type,
                      boost::spirit::unused_type, boost::spirit::unused_type>>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval,
                      boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>>>, boost::fusion::nil_>>, To=boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>]" at line 482 of
                      "PATH/boost/boost_1_58_0/include/boost/type_traits/is_convertible.hpp"
            instantiation of class "boost::is_convertible<From, To> [with From=boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type,
                      boost::spirit::unused_type>>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval, boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,
                      boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>>>, boost::fusion::nil_>>, To=boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>]" at line 27 of
                      "PATH/boost/boost_1_58_0/include/boost/mpl/aux_/nested_type_wknd.hpp"
            [ 26 instantiation contexts not shown ]
            instantiation of class "boost::proto::transform<PrimitiveTransform, X>::result<Sig> [with PrimitiveTransform=boost::proto::switch_<boost::spirit::meta_compiler<boost::spirit::qi::domain>::cases, boost::proto::tag_of<boost::proto::_> ()>, X=void, Sig=boost::spirit::meta_compiler<boost::spirit::qi::domain>::meta_grammar (boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const
                      boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type, boost::spirit::unused_type> &, const boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign,
                      boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::spirit::_1_type>, 2L>> &>, 2L> &, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,
                      boost::proto::argsns_::term<const char &>, 0L>, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type, boost::spirit::unused_type> &, const
                      boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval, boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,
                      boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>> &>, 2L> &>, 2L> &>, 1L> &>, 2L>, boost::mpl::void_, boost::spirit::unused_type)]" at line 206 of "PATH/boost/boost_1_58_0/include/boost/spirit/home/support/meta_compiler.hpp"
            instantiation of class "boost::spirit::result_of::compile<Domain, Expr, Modifiers, Enable> [with Domain=boost::spirit::qi::domain, Expr=boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (),
                      boost::spirit::ascii::space_type, boost::spirit::unused_type, boost::spirit::unused_type> &, const boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::spirit::_1_type>, 2L>> &>, 2L> &, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference,
                      boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char &>, 0L>, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>,
                      std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type, boost::spirit::unused_type> &, const boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>,
                      boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval, boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>> &>, 2L> &>, 2L> &>, 1L> &>, 2L>,
                      Modifiers=boost::spirit::unused_type, Enable=void]" at line 184 of "PATH/boost/boost_1_58_0/include/boost/spirit/home/qi/nonterminal/rule.hpp"
            instantiation of "void boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::define<Auto,Expr>(boost::spirit::qi::rule<Iterator, T1, T2, T3, T4> &, const Expr &, boost::mpl::true_) [with Iterator=__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, T1=expr_node (), T2=boost::spirit::ascii::space_type, T3=boost::spirit::unused_type, T4=boost::spirit::unused_type, Auto=boost::mpl::false_,
                      Expr=boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type, boost::spirit::unused_type> &, const
                      boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::spirit::_1_type>, 2L>> &>, 2L> &, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right,
                      boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char &>, 0L>, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type,
                      boost::spirit::unused_type> &, const boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval,
                      boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>> &>, 2L> &>, 2L> &>, 1L> &>, 2L>]" at line 221 of
                      "PATH/boost/boost_1_58_0/include/boost/spirit/home/qi/nonterminal/rule.hpp"
            instantiation of "boost::spirit::qi::rule<Iterator, T1, T2, T3, T4> &boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::operator=(const Expr &) [with Iterator=__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, T1=expr_node (), T2=boost::spirit::ascii::space_type, T3=boost::spirit::unused_type, T4=boost::spirit::unused_type, Expr=boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right,
                      boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type, boost::spirit::unused_type> &, const boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign,
                      boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::spirit::_1_type>, 2L>> &>, 2L> &, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,
                      boost::proto::argsns_::term<const char &>, 0L>, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, expr_node (), boost::spirit::ascii::space_type, boost::spirit::unused_type, boost::spirit::unused_type> &, const
                      boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::assign, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::attribute<0>>, 0L>, boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::phoenix::detail::tag::function_eval, boost::proto::argsns_::list4<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,
                      boost::proto::argsns_::term<binary_op_phx>, 0L>, boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<const char *>, 0L>, boost::spirit::_val_type, boost::spirit::_1_type>, 4L>>>, 2L>> &>, 2L> &>, 2L> &>, 1L> &>, 2L>]" at line 82 of "test.cpp"
            instantiation of "Grammar<Iterator>::Grammar() [with Iterator=__gnu_cxx::__normal_iterator<const char *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>]" at line 92 of "test.cpp"

 

I tried defining GCC macros to see if something was missing in Boost config, but it didn't change the error. Also I didn't find anything relevant of Internet :(

We are quite eager to thnk about shipping the product compiled with the Intel Compiler because of performance, but having this issue is quite worrying...

0 Kudos
6 Replies
Melanie_B_Intel
Employee
613 Views

I can see this problem also. I'll post again when I have more information.

0 Kudos
Matthieu_Brucher
Beginner
613 Views

Thanks!

0 Kudos
Melanie_B_Intel
Employee
613 Views

Thanks for reporting this problem, I've opened DPD200374125 in our internal bugs database.

0 Kudos
Melanie_B_Intel
Employee
613 Views

The bug DPD200374125 is still open, but I tried your test case with our 16.0 compiler in gcc 482 environment using boost 1.59 and it compiles successfully.

0 Kudos
Feilong_H_Intel
Employee
613 Views

This issue has been fixed in 16.0 compiler.  16.0 update 2 should contain the fix.  FYI.

Thanks.

0 Kudos
Matthieu_Brucher
Beginner
613 Views

Hi,

Indeed, I can confirm that for 16, it works.

Unfortunately, the compiler still utterly fails with other gcc headers (5.3.0), so still waiting on Intel to support C++11 properly...

0 Kudos
Reply