https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70401
--- Comment #4 from Rainer Emrich <rai...@emrich-ebersheim.de> --- gcc-7.3.0 on x86_64-w64-mingw32 doesn't compile this code: $ g++ -std=c++1z aa.cpp -o aa.exe aa.cpp: In instantiation of 'std::ostream& operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]': aa.cpp:133:54: required from here aa.cpp:113:7: error: call of overloaded 'apply(const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&, const std::tuple<long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*>&)' is ambiguous apply(printer,toprint); ~~~~~^~~~~~~~~~~~~~~~~ aa.cpp:105:6: note: candidate: auto apply(F&&, Tuple&&) [with F = const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&; Tuple = const std::tuple<long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*>&] auto apply(F&& f, Tuple&& t) { ^~~~~ In file included from aa.cpp:1:0: d:\opt\devel\gnu\gcc\mingw_nt\x86_64-w64-mingw32\mingw-w64-runtime-trunk-svn\gcc-7.3.0\include\c++\7.3.0\tuple:1668:5: note: candidate: constexpr decltype(auto) std::apply(_Fn&&, _Tuple&&) [with _Fn = const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&; _Tuple = const std::tuple<long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*>&] apply(_Fn&& __f, _Tuple&& __t) ^~~~~ aa.cpp: In instantiation of 'std::ostream& operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]': aa.cpp:134:53: required from here aa.cpp:113:7: error: call of overloaded 'apply(const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&, const std::tuple<long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*>&)' is ambiguous apply(printer,toprint); ~~~~~^~~~~~~~~~~~~~~~~ aa.cpp:105:6: note: candidate: auto apply(F&&, Tuple&&) [with F = const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&; Tuple = const std::tuple<long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*>&] auto apply(F&& f, Tuple&& t) { ^~~~~ In file included from aa.cpp:1:0: d:\opt\devel\gnu\gcc\mingw_nt\x86_64-w64-mingw32\mingw-w64-runtime-trunk-svn\gcc-7.3.0\include\c++\7.3.0\tuple:1668:5: note: candidate: constexpr decltype(auto) std::apply(_Fn&&, _Tuple&&) [with _Fn = const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&; _Tuple = const std::tuple<long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, const char*, const char*, long long unsigned int, long long unsigned int, const char*, const char*, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*, long long unsigned int, long long unsigned int, const char*>&] apply(_Fn&& __f, _Tuple&& __t) ^~~~~