#include <cstdarg>
#include <cstring>
#include <cstdio>
/**
An example to demostrate an unexpected function overload...
MyPrintf(fmt, char*) calls MyPrintf(fmt, va_list&)
instead of MyPrintf(fmt, ...)
MyPrintf(fmt, const char*) calls as expected MyPrintf(fmt, ...)
*/
void MyPrintf(const char* fmt, ...)
{
printf("%s ('%s')\n", __PRETTY_FUNCTION__, fmt);
}
void MyPrintf(const char* fmt, va_list& vargs)
{
printf("%s ('%s', vargs='%p')\n", __PRETTY_FUNCTION__, fmt, &vargs);
}
int main()
{
char* str = strdup("hello all\n");
printf("str@ %p\n", str);
MyPrintf("%s", (const char*) str); // calls MyPrintf(fmt, ...)
MyPrintf("%s", str); // calls MyPrintf(fmt, va_list&)
return 0;
}
I2luY2x1ZGUgPGNzdGRhcmc+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgoKLyoqCiAgQW4gZXhhbXBsZSB0byBkZW1vc3RyYXRlIGFuIHVuZXhwZWN0ZWQgZnVuY3Rpb24gb3ZlcmxvYWQuLi4KICAKICBNeVByaW50ZihmbXQsIGNoYXIqKSBjYWxscyBNeVByaW50ZihmbXQsIHZhX2xpc3QmKSAKICBpbnN0ZWFkIG9mIE15UHJpbnRmKGZtdCwgLi4uKQogIAogIE15UHJpbnRmKGZtdCwgY29uc3QgY2hhciopIGNhbGxzIGFzIGV4cGVjdGVkIE15UHJpbnRmKGZtdCwgLi4uKQogIAoqLwoKCnZvaWQgTXlQcmludGYoY29uc3QgY2hhciogZm10LCAuLi4pCnsKCXByaW50ZigiJXMgKCclcycpXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmbXQpOwp9Cgp2b2lkIE15UHJpbnRmKGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlzdCYgdmFyZ3MpCnsKCXByaW50ZigiJXMgKCclcycsIHZhcmdzPSclcCcpXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmbXQsICZ2YXJncyk7Cn0KCmludCBtYWluKCkKewoJY2hhciogc3RyID0gc3RyZHVwKCJoZWxsbyBhbGxcbiIpOwoJcHJpbnRmKCJzdHJAICVwXG4iLCBzdHIpOwoJCglNeVByaW50ZigiJXMiLCAoY29uc3QgY2hhciopIHN0cik7IC8vIGNhbGxzIE15UHJpbnRmKGZtdCwgLi4uKQoJTXlQcmludGYoIiVzIiwgc3RyKTsgICAgICAgICAgICAgICAvLyBjYWxscyBNeVByaW50ZihmbXQsIHZhX2xpc3QmKQoJCglyZXR1cm4gMDsKfQo=