#include <cstdio>
#include <iostream>
template<size_t BufSize, typename... Args>
int strprintf(char(&buf)[BufSize], const char* fmt, Args&&... args)
{
static_assert(BufSize > 0, "Buffer too small");
static_assert(BufSize < (1 << 31), "Buffer too large");
return snprintf(buf, BufSize, fmt, std::forward<Args>(args)...);
}
int main() {
char buf[16];
int printed = strprintf(buf, "hello world %s so long", "oversized load");
std::cout << buf << "\n";
}
ICAgICNpbmNsdWRlIDxjc3RkaW8+CiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CgogICAgdGVtcGxhdGU8c2l6ZV90IEJ1ZlNpemUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICBpbnQgc3RycHJpbnRmKGNoYXIoJmJ1ZilbQnVmU2l6ZV0sIGNvbnN0IGNoYXIqIGZtdCwgQXJncyYmLi4uIGFyZ3MpCiAgICB7CiAgICAgICAgc3RhdGljX2Fzc2VydChCdWZTaXplID4gMCwgIkJ1ZmZlciB0b28gc21hbGwiKTsKICAgICAgICBzdGF0aWNfYXNzZXJ0KEJ1ZlNpemUgPCAoMSA8PCAzMSksICJCdWZmZXIgdG9vIGxhcmdlIik7CiAgICAgICAgcmV0dXJuIHNucHJpbnRmKGJ1ZiwgQnVmU2l6ZSwgZm10LCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogICAgfQoKICAgIGludCBtYWluKCkgewogICAgICAgIGNoYXIgYnVmWzE2XTsKICAgICAgICBpbnQgcHJpbnRlZCA9IHN0cnByaW50ZihidWYsICJoZWxsbyB3b3JsZCAlcyBzbyBsb25nIiwgIm92ZXJzaXplZCBsb2FkIik7CiAgICAgICAgc3RkOjpjb3V0IDw8IGJ1ZiA8PCAiXG4iOwogICAgfQo=