prog.cpp: In instantiation of 'struct overload<main(int, char**)::<lambda(char*)> >':
prog.cpp:22:8: required from 'struct overload<main(int, char**)::<lambda(int)>, main(int, char**)::<lambda(char*)> >'
prog.cpp:37:31: required from 'auto make_overload(Fs ...) [with Fs = {main(int, char**)::<lambda(int)>, main(int, char**)::<lambda(char*)>}]'
prog.cpp:54:69: required from here
prog.cpp:32:22: error: type 'main(int, char**)::<lambda(char*)>' is not a base type for type 'overload<main(int, char**)::<lambda(char*)> >'
using F0::operator();
^
prog.cpp: In instantiation of 'struct overload<main(int, char**)::<lambda(int)>, main(int, char**)::<lambda(char*)> >':
prog.cpp:37:31: required from 'auto make_overload(Fs ...) [with Fs = {main(int, char**)::<lambda(int)>, main(int, char**)::<lambda(char*)>}]'
prog.cpp:54:69: required from here
prog.cpp:26:38: error: no members matching 'overload<main(int, char**)::<lambda(char*)> >::operator()' in 'struct overload<main(int, char**)::<lambda(char*)> >'
using overload<Frest...>::operator();
^
prog.cpp: In function 'int main(int, char**)':
prog.cpp:56:11: error: no match for call to '(overload<main(int, char**)::<lambda(int)>, main(int, char**)::<lambda(char*)> >) (char*&)'
f(argv[0]);
^
prog.cpp:53:15: note: candidate: main(int, char**)::<lambda(int)> <near match>
[CAP] (int x) { cout << "int x==" << x << endl; PRINTY(); },
^
prog.cpp:53:15: note: conversion of argument 1 would be ill-formed:
prog.cpp:56:10: error: invalid conversion from 'char*' to 'int' [-fpermissive]
f(argv[0]);
^
prog.cpp: At global scope:
prog.cpp:23:3: error: 'overload<F0, Frest ...>::overload(F0, Frest ...) [with F0 = main(int, char**)::<lambda(int)>; Frest = {main(int, char**)::<lambda(char*)>}]', declared using local type 'main(int, char**)::<lambda(int)>', is used but never defined [-fpermissive]
overload(F0 f0, Frest... rest) : F0(f0), overload<Frest...>(rest...) {}
^