https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101566
--- Comment #2 from Dale Weiler <weilercdale at gmail dot com> --- (In reply to Andrew Pinski from comment #1) > f.0_1 = f_8(D); > tuple = t; > _11 = &tuple.__ts#2; > tuple ={v} {CLOBBER}; > > > template<Size N, typename T> > constexpr decltype(auto) get(T tuple) { return *tuple(Get<N>{}); } > > > I think the above function (get) is broken and is returning a reference to > the argument and that would be invalid. Ah, passing `T&` here instead of T does appear to avoid the issue, the question now becomes why does -fsanitize=undefined find nothing, and is the return type, i.e `declval(get<N>(t))` different in gcc compared to the other compiles. I would expect similar issues in the other compilers if this is returning a reference to the temporary given by the argument list of `get`