#include <iostream>
#include <string>
#include <utility>
typedef size_t Header;
template <typename TPayload>
class Message
{
public:
template <typename ...Args>
Message(Args&&... args)
: m_header(sizeof(TPayload)),
m_payload(std::forward<Args>(args)...)
{}
void show_payload() const
{
std::cout << m_payload << '\n';
}
private:
const Header m_header;
const TPayload m_payload;
};
int main()
{
Message<std::string> test(10, 'a');
test.show_payload();
Message<double> test2(3.14);
test2.show_payload();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dXRpbGl0eT4KdHlwZWRlZiBzaXplX3QgSGVhZGVyOwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVFBheWxvYWQ+CmNsYXNzIE1lc3NhZ2UKewogICAgcHVibGljOgogICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgogICAgICAgIE1lc3NhZ2UoQXJncyYmLi4uIGFyZ3MpCiAgICAgICAgICAgICA6IG1faGVhZGVyKHNpemVvZihUUGF5bG9hZCkpLAogICAgICAgICAgICAgICBtX3BheWxvYWQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKQogICAgICAgICAgICAgICB7fQogICAgICAgIHZvaWQgc2hvd19wYXlsb2FkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgbV9wYXlsb2FkIDw8ICdcbic7CiAgICAgICAgfQogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBIZWFkZXIgICBtX2hlYWRlcjsKICAgICAgICBjb25zdCBUUGF5bG9hZCBtX3BheWxvYWQ7Cn07CgppbnQgbWFpbigpCnsKICAgICAgICBNZXNzYWdlPHN0ZDo6c3RyaW5nPiB0ZXN0KDEwLCAnYScpOwogICAgICAgIHRlc3Quc2hvd19wYXlsb2FkKCk7CiAgICAgICAgCiAgICAgICAgTWVzc2FnZTxkb3VibGU+IHRlc3QyKDMuMTQpOwogICAgICAgIHRlc3QyLnNob3dfcGF5bG9hZCgpOwoKfQo=