https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103448
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Janez Zemva from comment #7) > The c++17 type deduction rules are also going on. This makes me wonder how > std::make_tuple() circumvents the problem. Easy, it does not use the C++17 deduction rules at all, it is explict. That is: std::make_tuple is defined as: template<typename ...T> auto make_tuple(const T &...a) { return std::tuple<T...>(a...); } And there is no C++17 class deduction rules going on, it is pure normal C++11 template function deduction rules.