Opened 9 years ago

Last modified 9 years ago

#9205 new Bugs

[variant or mpl] compilation error VC2013

Reported by: Akira Takahashi <faithandbrave@…> Owned by: Aleksey Gurtovoy
Milestone: To Be Determined Component: mpl
Version: Boost 1.55.0 Severity: Showstopper
Keywords: Cc:

Description

I tried to use Boost 1.55.0 Beta RC's boost::variant with VC2013 RC. Compilation error this code:

#include <boost/variant.hpp>

int main()
{
    boost::variant<int, char> v;
}

Error message is here: (sorry, japanese error message...)

1>------ ビルド開始: プロジェクト:CppConsole, 構成:Debug Win32 ------
1>  main.cpp
1>c:\boost\boost-trunk-master\boost\mpl\assert.hpp(149): error C2143: 構文エラー : ';' が '<' の前にありません。
1>          c:\boost\boost-trunk-master\boost\mpl\assert.hpp(153) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::eval_assert<Pred>' の参照を確認してください
1>c:\boost\boost-trunk-master\boost\mpl\assert.hpp(149): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\boost\boost-trunk-master\boost\mpl\assert.hpp(152): error C2238: ';' の前に無効なトークンがあります。
1>c:\boost\boost-trunk-master\boost\mpl\assert.hpp(159): error C2143: 構文エラー : ';' が '<' の前にありません。
1>          c:\boost\boost-trunk-master\boost\mpl\assert.hpp(163) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::eval_assert_not<Pred>' の参照を確認してください
1>c:\boost\boost-trunk-master\boost\mpl\assert.hpp(159): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\boost\boost-trunk-master\boost\mpl\assert.hpp(162): error C2238: ';' の前に無効なトークンがあります。
1>c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\arg.hpp(45): error C2039: 'assert_not_arg' : 'boost::mpl' のメンバーではありません。
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\apply_wrap.hpp(49) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::arg<1>::apply<T1,T2,boost::mpl::na,boost::mpl::na,boost::mpl::na>' の参照を確認してください
1>          with
1>          [
1>              T1=boost::mpl::l_end
1>  ,            T2=int
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\apply.hpp(63) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::apply_wrap2<boost::mpl::protect<boost::mpl::arg<1>,0>,T1,T2>' の参照を確認してください
1>          with
1>          [
1>              T1=boost::mpl::l_end
1>  ,            T2=int
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\reverse_fold_impl.hpp(74) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::apply2<ForwardOp,boost::mpl::l_end,int>' の参照を確認してください
1>          with
1>          [
1>              ForwardOp=boost::mpl::arg<1>
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\reverse_fold.hpp(41) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::aux::reverse_fold_impl<2,boost::mpl::l_iter<boost::mpl::list2<T0,T1>>,boost::mpl::l_iter<boost::mpl::l_end>,State,BackwardOp,ForwardOp>' の参照を確認してください
1>          with
1>          [
1>              T0=int
1>  ,            T1=char
1>  ,            State=boost::mpl::l_end
1>  ,            BackwardOp=boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>,boost::mpl::void_>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::unwrap_recursive,boost::mpl::void_>,boost::mpl::arg<1>>,0>,boost::mpl::_2>>
1>  ,            ForwardOp=boost::mpl::arg<1>
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\transform.hpp(65) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::reverse_fold<Seq,boost::mpl::l_end,boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>,boost::mpl::void_>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<F,Tag>,boost::mpl::arg<1>>,0>,boost::mpl::_2>>,boost::mpl::arg<1>>' の参照を確認してください
1>          with
1>          [
1>              Seq=boost::mpl::list2<int,char>
1>  ,            F=boost::unwrap_recursive
1>  ,            Tag=boost::mpl::void_
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\transform.hpp(113) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::aux::reverse_transform1_impl<P1,P2,boost::mpl::front_inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<Sequence>::type>>' の参照を確認してください
1>          with
1>          [
1>              P1=boost::mpl::list2<int,char>
1>  ,            P2=boost::unwrap_recursive<boost::mpl::_1>
1>  ,            Sequence=boost::mpl::list2<int,char>
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\eval_if.hpp(41) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::transform1<Seq1,Seq2OrOperation,OperationOrInserter>' の参照を確認してください
1>          with
1>          [
1>              Seq1=boost::mpl::list2<int,char>
1>  ,            Seq2OrOperation=boost::unwrap_recursive<boost::mpl::_1>
1>  ,            OperationOrInserter=boost::mpl::na
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\transform.hpp(138) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::eval_if<boost::mpl::or_<boost::mpl::is_na<boost::mpl::na>,boost::mpl::is_lambda_expression<Seq2OrOperation>,boost::mpl::not_<boost::mpl::is_sequence<Seq2OrOperation>>,boost::mpl::false_,boost::mpl::false_>,boost::mpl::transform1<Seq1,Seq2OrOperation,OperationOrInserter>,boost::mpl::transform2<Seq1,Seq2OrOperation,OperationOrInserter,Inserter>>' の参照を確認してください
1>          with
1>          [
1>              Seq2OrOperation=boost::unwrap_recursive<boost::mpl::_1>
1>  ,            Seq1=boost::mpl::list2<int,char>
1>  ,            OperationOrInserter=boost::mpl::na
1>  ,            Inserter=boost::mpl::na
1>          ]
1>          c:\boost\boost-trunk-master\boost\variant\variant.hpp(1209) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::transform<boost::mpl::list2<T0,T1>,boost::unwrap_recursive<boost::mpl::_1>,boost::mpl::na,boost::mpl::na>' の参照を確認してください
1>          with
1>          [
1>              T0=int
1>  ,            T1=char
1>          ]
1>          c:\users\a_takahashi\documents\visual studio 2013\projects\cppconsole\cppconsole\main.cpp(5) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::variant<int,char,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost::detail::variant::void_>' の参照を確認してください
1>c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\arg.hpp(45): error C3861: 'assert_not_arg': 識別子が見つかりませんでした
1>c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\arg.hpp(63): error C2039: 'assert_not_arg' : 'boost::mpl' のメンバーではありません。
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\apply_wrap.hpp(80) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::arg<2>::apply<T1,T2,T3,T4,T5>' の参照を確認してください
1>          with
1>          [
1>              T1=boost::mpl::l_end
1>  ,            T2=char
1>  ,            T3=boost::mpl::na
1>  ,            T4=boost::mpl::na
1>  ,            T5=boost::mpl::na
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\bind.hpp(50) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::apply_wrap5<boost::mpl::arg<2>,U1,U2,U3,U4,U5>' の参照を確認してください
1>          with
1>          [
1>              U1=boost::mpl::l_end
1>  ,            U2=char
1>  ,            U3=boost::mpl::na
1>  ,            U4=boost::mpl::na
1>  ,            U5=boost::mpl::na
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\bind.hpp(143) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::aux::resolve_bind_arg<boost::mpl::arg<2>,U1,U2,U3,U4,U5>' の参照を確認してください
1>          with
1>          [
1>              U1=boost::mpl::l_end
1>  ,            U2=char
1>  ,            U3=boost::mpl::na
1>  ,            U4=boost::mpl::na
1>  ,            U5=boost::mpl::na
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\apply_wrap.hpp(80) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<F,Tag>,boost::mpl::arg<1>>,0>,boost::mpl::_2>::apply<T1,T2,T3,T4,T5>' の参照を確認してください
1>          with
1>          [
1>              F=boost::unwrap_recursive
1>  ,            Tag=boost::mpl::void_
1>  ,            T1=boost::mpl::l_end
1>  ,            T2=char
1>  ,            T3=boost::mpl::na
1>  ,            T4=boost::mpl::na
1>  ,            T5=boost::mpl::na
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\bind.hpp(160) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::apply_wrap5<boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<F,Tag>,boost::mpl::arg<1>>,0>,boost::mpl::_2>,U1,U2,U3,U4,U5>' の参照を確認してください
1>          with
1>          [
1>              F=boost::unwrap_recursive
1>  ,            Tag=boost::mpl::void_
1>  ,            U1=boost::mpl::l_end
1>  ,            U2=char
1>  ,            U3=boost::mpl::na
1>  ,            U4=boost::mpl::na
1>  ,            U5=boost::mpl::na
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\bind.hpp(206) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::aux::resolve_bind_arg<boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<F,Tag>,boost::mpl::arg<1>>,0>,boost::mpl::_2>,U1,U2,U3,U4,U5>' の参照を確認してください
1>          with
1>          [
1>              F=boost::unwrap_recursive
1>  ,            Tag=boost::mpl::void_
1>  ,            U1=boost::mpl::l_end
1>  ,            U2=char
1>  ,            U3=boost::mpl::na
1>  ,            U4=boost::mpl::na
1>  ,            U5=boost::mpl::na
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\apply_wrap.hpp(49) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>,boost::mpl::void_>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<F,Tag>,boost::mpl::arg<1>>,0>,boost::mpl::_2>>::apply<T1,T2,boost::mpl::na,boost::mpl::na,boost::mpl::na>' の参照を確認してください
1>          with
1>          [
1>              F=boost::unwrap_recursive
1>  ,            Tag=boost::mpl::void_
1>  ,            T1=boost::mpl::l_end
1>  ,            T2=char
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\apply.hpp(63) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::apply_wrap2<boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>,boost::mpl::void_>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<F,Tag>,boost::mpl::arg<1>>,0>,boost::mpl::_2>>,T1,T2>' の参照を確認してください
1>          with
1>          [
1>              F=boost::unwrap_recursive
1>  ,            Tag=boost::mpl::void_
1>  ,            T1=boost::mpl::l_end
1>  ,            T2=char
1>          ]
1>          c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\reverse_fold_impl.hpp(81) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::mpl::apply2<BackwardOp,boost::mpl::l_end,char>' の参照を確認してください
1>          with
1>          [
1>              BackwardOp=boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>,boost::mpl::void_>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::unwrap_recursive,boost::mpl::void_>,boost::mpl::arg<1>>,0>,boost::mpl::_2>>
1>          ]
1>c:\boost\boost-trunk-master\boost\mpl\aux_\preprocessed\plain\arg.hpp(63): error C3861: 'assert_not_arg': 識別子が見つかりませんでした
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

patch to boost/mpl/assert.hpp, line 137:

#if BOOST_WORKAROUND(BOOST_MSVC, >= 1700)

to

#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)

Change History (3)

comment:1 by Akira Takahashi <faithandbrave@…>, 9 years ago

Sorry, already fixed in trunk. Please close this ticket.

comment:2 by raad@…, 9 years ago

No, please don't just close the ticket. Please merge r84443 to the release branch. This issue will be a showstopper once VS2013 RTM is released.

comment:3 by Antony Polukhin, 9 years ago

Component: variantmpl
Owner: changed from ebf to Aleksey Gurtovoy
Note: See TracTickets for help on using tickets.