https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70135
--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> --- So in finish_static_assert without ubsan we have: boost::detail::operators::operator==<boost::tuple<boost::tuple<boost::tuple<int, int, int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l, 1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_, boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double, std::nullptr_t> > >, boost::tuple<boost::tuple<boost::tuple<int, int, int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l, 1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_, boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double, std::nullptr_t> > > > (TARGET_EXPR <D.11827, grouped>, TARGET_EXPR <D.11816, boost::make_t<boost::tuple_tag>::operator()<boost::tuple<boost::tuple<int, int, int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l, 1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_, boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double, std::nullptr_t> > > (&make_tuple, TARGET_EXPR <D.11809, boost::make_t<boost::tuple_tag>::operator()<boost::tuple<int, int, int>, boost::tuple<char, char, char> > (&make_tuple, TARGET_EXPR <D.11807, boost::make_t<boost::tuple_tag>::operator()<int, int, int> (&make_tuple, 1, 2, 3)>, TARGET_EXPR <D.11808, boost::make_t<boost::tuple_tag>::operator()<char, char, char> (&make_tuple, 120, 121, 122)>)>, TARGET_EXPR <D.11811, boost::make_t<boost::tuple_tag>::operator()<boost::range<long int, 0l, 1l> > (&make_tuple, TARGET_EXPR <D.11810, range_c>;, <<< Unknown tree: empty_class_expr >>>;)>, TARGET_EXPR <D.11815, boost::make_t<boost::tuple_tag>::operator()<boost::tuple<boost::type_impl<char>::_, boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double, std::nullptr_t> > (&make_tuple, TARGET_EXPR <D.11813, tuple_t>, TARGET_EXPR <D.11814, range_c>;, <<< Unknown tree: empty_class_expr >>>;, TARGET_EXPR <D.11812, boost::make_t<boost::tuple_tag>::operator()<double, std::nullptr_t> (&make_tuple, 1.23400000000000005684341886080801486968994140625e+2, 0)>)>)>) which gets folded to 1 and with -fsanitize=bounds: boost::detail::operators::operator==<boost::tuple<boost::tuple<boost::tuple<int, int, int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l, 1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_, boost::type_impl<int>::_> > >, boost::tuple<boost::tuple<boost::tuple<int, int, int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l, 1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_, boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double, std::nullptr_t> > > > (TARGET_EXPR <D.12685, grouped>, TARGET_EXPR <D.12674, boost::make_t<boost::tuple_tag>::operator()<boost::tuple<boost::tuple<int, int, int>, boost::tuple<char, char, char> >, boost::tuple<boost::range<long int, 0l, 1l> >, boost::tuple<boost::tuple<boost::type_impl<char>::_, boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double, std::nullptr_t> > > (&make_tuple, TARGET_EXPR <D.11831, boost::make_t<boost::tuple_tag>::operator()<boost::tuple<int, int, int>, boost::tuple<char, char, char> > (&make_tuple, TARGET_EXPR <D.11829, boost::make_t<boost::tuple_tag>::operator()<int, int, int> (&make_tuple, 1, 2, 3)>, TARGET_EXPR <D.11830, boost::make_t<boost::tuple_tag>::operator()<char, char, char> (&make_tuple, 120, 121, 122)>)>, TARGET_EXPR <D.11833, boost::make_t<boost::tuple_tag>::operator()<boost::range<long int, 0l, 1l> > (&make_tuple, TARGET_EXPR <D.11832, range_c>;, <<< Unknown tree: empty_class_expr >>>;)>, TARGET_EXPR <D.12287, boost::make_t<boost::tuple_tag>::operator()<boost::tuple<boost::type_impl<char>::_, boost::type_impl<int>::_>, boost::range<int, 0, 2>, boost::tuple<double, std::nullptr_t> > (&make_tuple, TARGET_EXPR <D.11841, tuple_t>, TARGET_EXPR <D.11842, range_c>;, <<< Unknown tree: empty_class_expr >>>;, TARGET_EXPR <D.11834, boost::make_t<boost::tuple_tag>::operator()<double, std::nullptr_t> (&make_tuple, 1.23400000000000005684341886080801486968994140625e+2, 0)>)>)>) which gets folded to 0. That doesn't tell much, eh.