#include <iostream>
using namespace std;
namespace foo {
template<typename T>
void cout (const T& value) {
std::cout<<value;
}
template<typename T, typename... R>
void cout (const T& head, const R&... tail) {
std::cout << head;
cout(tail...);
}
}
int main() {
using foo::cout;
cout(23, endl, 12312, "\n", 12412);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIGZvbyB7CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgY291dCAoY29uc3QgVCYgdmFsdWUpIHsKCXN0ZDo6Y291dDw8dmFsdWU7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFI+CnZvaWQgY291dCAoY29uc3QgVCYgaGVhZCwgY29uc3QgUiYuLi4gdGFpbCkgewoJc3RkOjpjb3V0IDw8IGhlYWQ7Cgljb3V0KHRhaWwuLi4pOwp9Cn0KCmludCBtYWluKCkgewoJdXNpbmcgZm9vOjpjb3V0OwoJY291dCgyMywgZW5kbCwgMTIzMTIsICJcbiIsIDEyNDEyKTsKCXJldHVybiAwOwp9Cg==
prog.cpp: In function 'int main()':
prog.cpp:19:35: error: no matching function for call to 'cout(int, <unresolved overloaded function type>, int, const char [2], int)'
cout(23, endl, 12312, "\n", 12412);
^
prog.cpp:19:35: note: candidates are:
prog.cpp:6:6: note: template<class T> void foo::cout(const T&)
void cout (const T& value) {
^
prog.cpp:6:6: note: template argument deduction/substitution failed:
prog.cpp:19:35: note: candidate expects 1 argument, 5 provided
cout(23, endl, 12312, "\n", 12412);
^
prog.cpp:11:6: note: void foo::cout(const T&, const R& ...) [with T = int; R = {}]
void cout (const T& head, const R&... tail) {
^
prog.cpp:11:6: note: candidate expects 1 argument, 5 provided