https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70909
--- Comment #35 from Mark Wielaard <mark at gcc dot gnu.org> --- (In reply to Marcel Böhme from comment #31) > Hi Mark, > > Your patch looks good to me. One more thing: It seems that our patches > evaluate these two mangled strings differently. Is it because of Nathan's > patch? Can these strings be demangled properly at all? > > > > _ZNK6Common15ConvertingRangeIN5boost12range_detail17transformed_rangeIZN1a1b1 > cEbEUljE_KSt6vectorIjSaIjEEEEEcvT_IS7_INS4_1dESaISF_EEEEv > > Common::ConvertingRange<boost::range_detail::transformed_range<a::b::c(bool): > :{lambda(unsigned int)#1}, std::vector<unsigned int, std::allocator<unsigned > int> > const> >::operator a::b::c(bool)::{lambda(unsigned int)#1}<a::d, > std::allocator<Common::ConvertingRange<boost::range_detail:: > transformed_range<a::b::c(bool)::{lambda(unsigned int)#1}, > std::vector<unsigned int, std::allocator<unsigned int> > const> >::operator > > ><a::b::c(bool)::{lambda(unsigned int)#1}<a::d, > std::allocator<Common::ConvertingRange<boost::range_detail:: > transformed_range<a::b::c(bool)::{lambda(unsigned int)#1}, > std::vector<unsigned int, std::allocator<unsigned int> > const> >::operator > Common::ConvertingRange<boost::range_detail::transformed_range<a::b::c(bool): > :{lambda(unsigned int)#1}, std::vector<unsigned int, std::allocator<unsigned > int> > const> >::operator > > >() const This one is still a mystery. It comes from PR67738. The other does demangle with Nathan's lambda patch if we allow two levels of recursion. > > _ZNK6clover6detail11basic_rangeINS_13adaptor_rangeINS_9addressesEINS2_IRFRNS_5eventEP9_cl_eventEINS_14iterator_rangeIPKS7_EEEEEEEENS0_16iterator_adaptorIS3_INSG_IS9_ISC_EEEEEESI_EcvT_ISt6vectorIPS4_SaISN_EEvEEv > > clover::detail::basic_range<clover::adaptor_range<clover::addresses, > clover::adaptor_range<clover::event& (&)(_cl_event*), > clover::iterator_range<_cl_event* const*> > >, > clover::detail::iterator_adaptor<clover::addresses<clover::detail:: > iterator_adaptor<clover::event& (&)(_cl_event*)<_cl_event* const*> > > >, > clover::detail::iterator_adaptor<clover::event& (&)(_cl_event*)<_cl_event* > const*> > >::operator std::vector<clover::event*, > std::allocator<clover::detail::basic_range<clover::adaptor_range<clover:: > addresses, clover::adaptor_range<clover::event& (&)(_cl_event*), > clover::iterator_range<_cl_event* const*> > >, > clover::detail::iterator_adaptor<clover::addresses<clover::detail:: > iterator_adaptor<clover::event& (&)(_cl_event*)<_cl_event* const*> > > >, > clover::detail::iterator_adaptor<clover::event& (&)(_cl_event*)<_cl_event* > const*> > >::operator > ><std::vector<clover::event*, > std::allocator<clover::detail::basic_range<clover::adaptor_range<clover:: > addresses, clover::adaptor_range<clover::event& (&)(_cl_event*), > clover::iterator_range<_cl_event* const*> > >, > clover::detail::iterator_adaptor<clover::addresses<clover::detail:: > iterator_adaptor<clover::event& (&)(_cl_event*)<_cl_event* const*> > > >, > clover::detail::iterator_adaptor<clover::event& (&)(_cl_event*)<_cl_event* > const*> > >::operator > clover::detail::basic_range<clover::adaptor_range<clover::addresses, > clover::adaptor_range<clover::event& (&)(_cl_event*), > clover::iterator_range<_cl_event* const*> > >, > clover::detail::iterator_adaptor<clover::addresses<clover::detail:: > iterator_adaptor<clover::event& (&)(_cl_event*)<_cl_event* const*> > > >, > clover::detail::iterator_adaptor<clover::event& (&)(_cl_event*)<_cl_event* > const*> > >::operator > >, void>() const