http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56268
Bug #: 56268 Summary: [4.7/4.8 Regression] C++11 ICE with boost multi-precision and boost variant during assignment Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: ko...@xs4all.nl Created attachment 29402 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29402 Sample code to reproduce the problem This issue is quite similar to bug 55842. Compiling the attached sample file leads to an internal compiler error. The problem only occurs with GCC-4.7 from Debian Unstable 4.7.2-5 and the upcoming 4.8 from Debian Experimental 4.8-20130127-1. Tested on an amd64 system. (GCC 4.6 works, properly.) I'm using a checkout of the latest boost release tree. The command to reproduce the issue is: gcc-4.8 -std=c++11 -c -I/src/boost/release test.cpp In file included from /src/boost/release/boost/config.hpp:57:0, from /src/boost/release/boost/variant/detail/config.hpp:16, from /src/boost/release/boost/variant/variant.hpp:23, from /src/boost/release/boost/variant.hpp:17, from test.cpp:2: /src/boost/release/boost/type_traits/has_nothrow_copy.hpp: In instantiation of 'const bool boost::detail::has_nothrow_copy_imp<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >::value': /src/boost/release/boost/type_traits/has_nothrow_copy.hpp:32:1: required from 'struct boost::has_nothrow_copy<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >' /src/boost/release/boost/variant/variant.hpp:1908:17: required from 'void boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::assigner::internal_visit(const RhsT&, int) [with RhsT = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >; T0_ = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_; T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 = boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 = boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 = boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 = boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 = boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 = boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 = boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 = boost::detail::variant::void_]' /src/boost/release/boost/variant/detail/visitation_impl.hpp:130:9: required from 'typename Visitor::result_type boost::detail::variant::visitation_impl_invoke_impl(int, Visitor&, VoidPtrCV, T*, mpl_::true_) [with Visitor = boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >::assigner; VoidPtrCV = const void*; T = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >; typename Visitor::result_type = void; mpl_::true_ = mpl_::bool_<true>]' /src/boost/release/boost/variant/detail/visitation_impl.hpp:173:9: required from 'typename Visitor::result_type boost::detail::variant::visitation_impl_invoke(int, Visitor&, VoidPtrCV, T*, NoBackupFlag, int) [with Visitor = boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >::assigner; VoidPtrCV = const void*; T = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >; NoBackupFlag = boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >::has_fallback_type_; typename Visitor::result_type = void]' /src/boost/release/boost/variant/detail/visitation_impl.hpp:256:5: required from 'typename Visitor::result_type boost::detail::variant::visitation_impl(int, int, Visitor&, VoidPtrCV, mpl_::false_, NoBackupFlag, Which*, step0*) [with Which = mpl_::int_<0>; step0 = boost::detail::variant::visitation_impl_step<boost::mpl::l_iter<boost::mpl::l_item<mpl_::long_<1l>, boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >, boost::mpl::l_end> >, boost::mpl::l_iter<boost::mpl::l_end> >; Visitor = boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >::assigner; VoidPtrCV = const void*; NoBackupFlag = boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >::has_fallback_type_; typename Visitor::result_type = void; mpl_::false_ = mpl_::bool_<false>]' /src/boost/release/boost/variant/variant.hpp:2326:13: required from 'static typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::internal_apply_visitor_impl(int, int, Visitor&, VoidPtrCV) [with Visitor = boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >::assigner; VoidPtrCV = const void*; T0_ = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_; T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 = boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 = boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 = boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 = boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 = boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 = boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 = boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 = boost::detail::variant::void_; typename Visitor::result_type = void]' /src/boost/release/boost/variant/variant.hpp:2348:13: required from 'typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::internal_apply_visitor(Visitor&) const [with Visitor = boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> > >::assigner; T0_ = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_; T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 = boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 = boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 = boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 = boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 = boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 = boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 = boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 = boost::detail::variant::void_; typename Visitor::result_type = void]' /src/boost/release/boost/variant/variant.hpp:2091:13: required from 'void boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::variant_assign(const boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>&) [with T0_ = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_; T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 = boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 = boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 = boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 = boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 = boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 = boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 = boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 = boost::detail::variant::void_]' /src/boost/release/boost/variant/variant.hpp:2175:27: required from 'boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>& boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::operator=(const boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>&) [with T0_ = boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u, 0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_; T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 = boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 = boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 = boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 = boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 = boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 = boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 = boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 = boost::detail::variant::void_]' test.cpp:16:4: required from here /src/boost/release/boost/type_traits/intrinsics.hpp:210:83: internal compiler error: in nothrow_spec_p, at cp/except.c:1263 # define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value) ^ /src/boost/release/boost/type_traits/has_nothrow_copy.hpp:24:40: note: in expansion of macro 'BOOST_HAS_NOTHROW_COPY' BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_COPY(T)); ^ Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions. Preprocessed source stored into /tmp/ccJawS1z.out file, please attach this to your bugreport.