https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92778
Jason Merrill <jason at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|ice-on-valid-code |ice-on-invalid-code Status|UNCONFIRMED |RESOLVED CC| |jason at gcc dot gnu.org Resolution|--- |DUPLICATE --- Comment #7 from Jason Merrill <jason at gcc dot gnu.org> --- The ICE on linux with GCC 9 is from infinite recursion checking the constraints on seqan3::detail::view_translate_single<urng_t>::view_translate_single(rng_t&&, seqan3::translation_frames = seqan3::translation_frames::FWD_FRAME_0) [with rng_t = ranges::reverse_view<seqan3::detail::view_translate_single<ranges::ref_view<std::vector<seqan3::dna5> > > >; urng_t = ranges::ref_view<std::vector<seqan3::dna5> >] checking std::ranges::viewable_range<rng_t> for reverse_view involves checking view_ for reverse_view -> checking semiregular for reverse_view -> checking copyable<reverse_view> -> copy_constructible<reverse_view> -> move_constructible<reverse_view> -> __is_constructible(reverse_view,reverse_view) trait which considers reverse_view(Rng) with Rng=view_translate_single which tries to construct a view_translate_single from the reverse_view using the above constructor, and repeat until we run out of stack. So, a duplicate of 88395. Reduced: template <class T> T&& declval(); template <class T> struct B { B(T); }; struct A { template <class U> requires __is_constructible (U,U) A(U&&); }; int main() { A a(declval<B<A>>()); } This fails in *** This bug has been marked as a duplicate of bug 88395 ***