https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70401
--- Comment #6 from jyong at gcc dot gnu.org --- I don't think this is mingw specific, I get the same error on Linux with gcc-7.3. g++ -std=c++1z variadic.cpp -o aa variadic.cpp: In instantiation of ‘std::ostream& operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]’: variadic.cpp:134:54: required from here variadic.cpp:114:7: error: call of overloaded ‘apply(const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&, const std::tuple<long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*>&)’ is ambiguous apply(printer,toprint); ~~~~~^~~~~~~~~~~~~~~~~ variadic.cpp:106:6: note: candidate: auto apply(F&&, Tuple&&) [with F = const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&; Tuple = const std::tuple<long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*>&] auto apply(F&& f, Tuple&& t) { ^~~~~ In file included from variadic.cpp:2:0: /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/g++-v7/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 unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&; _Tuple = const std::tuple<long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*>&] apply(_Fn&& __f, _Tuple&& __t) ^~~~~ variadic.cpp: In instantiation of ‘std::ostream& operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]’: variadic.cpp:135:53: required from here variadic.cpp:114:7: error: call of overloaded ‘apply(const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&, const std::tuple<long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*>&)’ is ambiguous apply(printer,toprint); ~~~~~^~~~~~~~~~~~~~~~~ variadic.cpp:106:6: note: candidate: auto apply(F&&, Tuple&&) [with F = const operator<<(std::ostream&, const std::tuple<_Tps ...>&) [with T = {long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&; Tuple = const std::tuple<long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*>&] auto apply(F&& f, Tuple&& t) { ^~~~~ In file included from variadic.cpp:2:0: /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/g++-v7/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 unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*}; std::ostream = std::basic_ostream<char>]::<lambda(auto:1&& ...)>&; _Tuple = const std::tuple<long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, const char*, const char*, long unsigned int, long unsigned int, const char*, const char*, long unsigned int, const char*, long unsigned int, long unsigned int, const char*, long unsigned int, long unsigned int, const char*>&] apply(_Fn&& __f, _Tuple&& __t)