{"issue":{"state":"open","created_at":"2011-11-21T13:56:51Z","updated_at":"2011-11-21T14:51:47Z","comments":2,"user":{"gravatar_id":"00c966feee317bba67f2393295641861","id":1210412,"url":"https://api.github.com/users/jjnvdm","login":"jjnvdm","avatar_url":"https://secure.gravatar.com/avatar/00c966feee317bba67f2393295641861?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},"body":"I updated to the latest version as shown above for my Lua binding to NT2 project. It used to build correctly, but now it makes the MSVC++ compiler crash with the following error message:\r\n\r\n2>c:\\dev\\boost_1_47_0\\boost\\proto\\detail\\preprocessed\\traits.hpp(196): fatal error C1001: An internal error has occurred in the compiler.\r\n2>  (compiler file 'msc1.cpp', line 1420)\r\n2>   To work around this problem, try simplifying or changing the program near the locations listed above.\r\n2>  Please choose the Technical Support command on the Visual C++ \r\n2>   Help menu, or open the Technical Support help file for more information\r\n2>          c:\\dev\\boost_1_47_0\\boost\\proto\\fusion.hpp(344) : see reference to class template instantiation 'boost::proto::result_of::child_c<Expr,N>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Expr=const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>> &,\r\n2>              N=1\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\fusion\\iterator\\deref.hpp(53) : see reference to class template instantiation 'boost::fusion::extension::deref_impl<boost::proto::tag::proto_expr_iterator>::apply<Iterator>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Iterator=boost::proto::detail::expr_iterator<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,1>\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\fusion\\view\\transform_view\\detail\\deref_impl.hpp(33) : see reference to class template instantiation 'boost::fusion::result_of::deref<Iterator>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Iterator=boost::proto::detail::expr_iterator<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,1>\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\fusion\\iterator\\deref.hpp(53) : see reference to class template instantiation 'boost::fusion::extension::deref_impl<boost::fusion::transform_view_iterator_tag>::apply<Iterator>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Iterator=const boost::fusion::transform_view_iterator<boost::proto::detail::expr_iterator<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,1>,nt2::container::size_transform<nt2::container::domain>>\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\fusion\\algorithm\\iteration\\detail\\fold.hpp(73) : see reference to class template instantiation 'boost::fusion::result_of::deref<Iterator>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Iterator=const boost::fusion::transform_view_iterator<boost::proto::detail::expr_iterator<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,1>,nt2::container::size_transform<nt2::container::domain>>\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\fusion\\algorithm\\iteration\\detail\\fold.hpp(316) : see reference to class template instantiation 'boost::fusion::detail::fold_lvalue_state<State,It,F>' being compiled\r\n2>          with\r\n2>          [\r\n2>              State=const nt2::of_size_<> &,\r\n2>              It=const boost::fusion::transform_view_iterator<boost::proto::detail::expr_iterator<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,1>,nt2::container::size_transform<nt2::container::domain>>,\r\n2>              F=nt2::container::ext::size_fold\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\fusion\\algorithm\\iteration\\detail\\fold.hpp(346) : see reference to class template instantiation 'boost::fusion::detail::result_of_unrolled_fold<StateRef,It0,F,N>' being compiled\r\n2>          with\r\n2>          [\r\n2>              StateRef=const nt2::of_size_<> &,\r\n2>              It0=boost::fusion::transform_view_iterator<boost::proto::detail::expr_iterator<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,1>,nt2::container::size_transform<nt2::container::domain>>,\r\n2>              F=nt2::container::ext::size_fold,\r\n2>              N=1\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\fusion\\algorithm\\iteration\\detail\\fold.hpp(360) : see reference to class template instantiation 'boost::fusion::detail::result_of_first_unrolledfold<StateRef,It0,F,SeqSize>' being compiled\r\n2>          with\r\n2>          [\r\n2>              StateRef=const nt2::of_size_<> &,\r\n2>              It0=boost::fusion::transform_view_iterator<boost::proto::detail::expr_iterator<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,0>,nt2::container::size_transform<nt2::container::domain>>,\r\n2>              F=nt2::container::ext::size_fold,\r\n2>              SeqSize=2\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\fusion\\algorithm\\iteration\\detail\\fold.hpp(398) : see reference to class template instantiation 'boost::fusion::detail::fold_impl<SeqSize,StateRef,It0,F>' being compiled\r\n2>          with\r\n2>          [\r\n2>              SeqSize=2,\r\n2>              StateRef=const nt2::of_size_<> &,\r\n2>              It0=boost::fusion::transform_view_iterator<boost::proto::detail::expr_iterator<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,0>,nt2::container::size_transform<nt2::container::domain>>,\r\n2>              F=nt2::container::ext::size_fold\r\n2>          ]\r\n2>          c:\\program files (x86)\\nt2\\include\\nt2\\core\\container\\dsl\\details\\elementwise.hpp(117) : see reference to class template instantiation 'boost::fusion::result_of::fold<Seq,State,F>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Seq=boost::fusion::transform_view<const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,nt2::container::size_transform<nt2::container::domain>>,\r\n2>              State=const nt2::of_size_<>,\r\n2>              F=nt2::container::ext::size_fold\r\n2>          ]\r\n2>          c:\\program files (x86)\\nt2\\include\\nt2\\core\\container\\dsl\\details\\trait_transform.hpp(35) : see reference to class template instantiation 'nt2::container::ext::size<Tag,Domain,N,Expr>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Tag=boost::proto::tag::plus,\r\n2>              Domain=nt2::container::domain,\r\n2>              N=2,\r\n2>              Expr=const nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\proto\\transform\\impl.hpp(80) : see reference to class template instantiation 'nt2::details::trait_transform<Trait,Domain>::impl<Expr,State,Data>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Trait=nt2::container::ext::size,\r\n2>              Domain=nt2::container::domain,\r\n2>              Expr=nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>,\r\n2>              State=int,\r\n2>              Data=int\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\proto\\transform\\impl.hpp(96) : see reference to class template instantiation 'boost::proto::detail::apply_transform<Sig>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Sig=nt2::container::size_transform<nt2::container::domain> (nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>)\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\utility\\result_of.hpp(80) : see reference to class template instantiation 'boost::proto::transform<PrimitiveTransform>::result<Sig>' being compiled\r\n2>          with\r\n2>          [\r\n2>              PrimitiveTransform=nt2::details::trait_transform<nt2::container::ext::size,nt2::container::domain>,\r\n2>              Sig=nt2::container::size_transform<nt2::container::domain> (nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>)\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\utility\\result_of.hpp(87) : see reference to class template instantiation 'boost::detail::result_of_nested_result<F,FArgs>' being compiled\r\n2>          with\r\n2>          [\r\n2>              F=nt2::container::size_transform<nt2::container::domain>,\r\n2>              FArgs=nt2::container::size_transform<nt2::container::domain> (nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>)\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\utility\\detail\\result_of_iterate.hpp(33) : see reference to class template instantiation 'boost::detail::tr1_result_of_impl<F,FArgs,HasResultType>' being compiled\r\n2>          with\r\n2>          [\r\n2>              F=nt2::container::size_transform<nt2::container::domain>,\r\n2>              FArgs=nt2::container::size_transform<nt2::container::domain> (nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>),\r\n2>              HasResultType=false\r\n2>          ]\r\n2>          c:\\dev\\boost_1_47_0\\boost\\utility\\detail\\result_of_iterate.hpp(81) : see reference to class template instantiation 'boost::tr1_result_of<F>' being compiled\r\n2>          with\r\n2>          [\r\n2>              F=nt2::container::size_transform<nt2::container::domain> (nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>)\r\n2>          ]\r\n2>          c:\\program files (x86)\\nt2\\include\\nt2\\core\\container\\dsl\\expression.hpp(97) : see reference to class template instantiation 'boost::result_of<F>' being compiled\r\n2>          with\r\n2>          [\r\n2>              F=nt2::container::size_transform<nt2::container::domain> (nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>>)\r\n2>          ]\r\n2>          c:\\dev\\lualab\\lab\\lab.cpp(115) : see reference to class template instantiation 'nt2::container::expression<Expr,ResultType>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Expr=const boost::proto::exprns_::expr<boost::proto::tag::plus,boost::proto::argsns_::list2<nt2::container::expression<const boost::proto::exprns_::expr<boost::proto::tag::terminal,boost::proto::argsns_::term<const double &>,0>,const double &>,const nt2::container::table<double> &>,2>,\r\n2>              ResultType=nt2::container::table_container<double,nt2::settings (nt2::of_size_<-1,-1,-1,-1>)>\r\n2>          ]\r\n2>          c:\\dev\\luabind-0.9.1\\luabind\\operator.hpp(284) : see reference to function template instantiation 'lab::matrix<T> lab::operator +<T0>(const T &,const lab::matrix<T> &)' being compiled\r\n2>          with\r\n2>          [\r\n2>              T=double,\r\n2>              T0=double\r\n2>          ]\r\n2>          c:\\dev\\luabind-0.9.1\\luabind\\operator.hpp(284) : while compiling class template member function 'void luabind::operators::add::apply<T0,T1,Policies>::execute(lua_State *,T0,T1)'\r\n2>          with\r\n2>          [\r\n2>              T0=double,\r\n2>              T1=lab::matrix<double> &,\r\n2>              Policies=luabind::detail::null_type\r\n2>          ]\r\n2>          c:\\dev\\luabind-0.9.1\\luabind\\operator.hpp(142) : see reference to class template instantiation 'luabind::operators::add::apply<T0,T1,Policies>' being compiled\r\n2>          with\r\n2>          [\r\n2>              T0=double,\r\n2>              T1=lab::matrix<double> &,\r\n2>              Policies=luabind::detail::null_type\r\n2>          ]\r\n2>          c:\\dev\\luabind-0.9.1\\luabind\\operator.hpp(141) : while compiling class template member function 'void luabind::detail::binary_operator<Derived,A,B>::apply<T,Policies>::execute(lua_State *,double,lab::matrix<double> &)'\r\n2>          with\r\n2>          [\r\n2>              Derived=luabind::operators::add,\r\n2>              A=double,\r\n2>              B=luabind::self_type,\r\n2>              T=dmat,\r\n2>              Policies=luabind::detail::null_type\r\n2>          ]\r\n2>          c:\\dev\\luabind-0.9.1\\luabind\\class.hpp(736) : see reference to class template instantiation 'luabind::detail::binary_operator<Derived,A,B>::apply<T,Policies>' being compiled\r\n2>          with\r\n2>          [\r\n2>              Derived=luabind::operators::add,\r\n2>              A=double,\r\n2>              B=luabind::self_type,\r\n2>              T=dmat,\r\n2>              Policies=luabind::detail::null_type\r\n2>          ]\r\n2>          c:\\dev\\lualab\\lab\\lab.cpp(182) : see reference to function template instantiation 'luabind::class_<T> &luabind::class_<T>::def<luabind::detail::binary_operator<Derived,A,B>>(luabind::detail::operator_<luabind::detail::binary_operator<Derived,A,B>>)' being compiled\r\n2>          with\r\n2>          [\r\n2>              T=dmat,\r\n2>              Derived=luabind::operators::add,\r\n2>              A=double,\r\n2>              B=luabind::self_type\r\n2>          ] ","assignee":{"gravatar_id":"7acf7a92dcaa6a37f8151eeb865715b2","id":285977,"url":"https://api.github.com/users/jfalcou","login":"jfalcou","avatar_url":"https://secure.gravatar.com/avatar/7acf7a92dcaa6a37f8151eeb865715b2?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},"id":2304766,"labels":[],"number":108,"pull_request":{"patch_url":null,"html_url":null,"diff_url":null},"title":"Latest version (b5e27769ab) crashes when compiled with MSVC++","closed_at":null,"html_url":"https://github.com/MetaScale/nt2/issues/108","url":"https://api.github.com/repos/MetaScale/nt2/issues/108","milestone":null},"action":"created","comment":{"created_at":"2011-11-21T14:51:47Z","updated_at":"2011-11-21T14:51:47Z","user":{"gravatar_id":"7acf7a92dcaa6a37f8151eeb865715b2","id":285977,"url":"https://api.github.com/users/jfalcou","login":"jfalcou","avatar_url":"https://secure.gravatar.com/avatar/7acf7a92dcaa6a37f8151eeb865715b2?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},"body":"If 290bb2ce4587518b1b6fe45d1d939fd8c86bacdb is the culprit, it means that the expression sizing is wrong for MSVC.\r\nI'll have a look.","id":2815967,"url":"https://api.github.com/repos/MetaScale/nt2/issues/comments/2815967"}}