#include <iostream>
struct Foo
{
void* address;
bool testFlag;
Foo ( ) : address(NULL), testFlag(false)
{
std::cout << "Foo default constructor called" << std::endl;
}
explicit Foo (bool Flag) : address(NULL), testFlag(Flag)
{
std::cout << "Foo (bool) constructor called" << std::endl;
}
explicit Foo (void* Pointer) : address(Pointer), testFlag(false)
{
std::cout << "Foo (void const*) constructor called" << std::endl;
}
Foo (void* Pointer, bool Flag) : address(Pointer), testFlag(Flag)
{
std::cout << "Foo (void*, bool) constructor called" << std::endl;
}
};
int main(void)
{
std::size_t* test = new std::size_t;
Foo a (test);
std::cout << a.address << ' ' << a.testFlag << std::endl;
Foo b (false);
std::cout << b.address << ' ' << b.testFlag << std::endl;
Foo c (true);
std::cout << c.address << ' ' << c.testFlag << std::endl;
Foo d;
std::cout << d.address << ' ' << d.testFlag << std::endl;
Foo e (test, true);
std::cout << e.address << ' ' << e.testFlag << std::endl;
delete test;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEZvbwp7CiAgICB2b2lkKiBhZGRyZXNzOwogICAgYm9vbCB0ZXN0RmxhZzsKICAgIAogICAgRm9vICggKSA6IGFkZHJlc3MoTlVMTCksIHRlc3RGbGFnKGZhbHNlKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiRm9vIGRlZmF1bHQgY29uc3RydWN0b3IgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICBleHBsaWNpdCBGb28gKGJvb2wgRmxhZykgOiBhZGRyZXNzKE5VTEwpLCB0ZXN0RmxhZyhGbGFnKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiRm9vIChib29sKSBjb25zdHJ1Y3RvciBjYWxsZWQiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIGV4cGxpY2l0IEZvbyAodm9pZCogUG9pbnRlcikgOiBhZGRyZXNzKFBvaW50ZXIpLCB0ZXN0RmxhZyhmYWxzZSkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkZvbyAodm9pZCBjb25zdCopIGNvbnN0cnVjdG9yIGNhbGxlZCIgPDwgc3RkOjplbmRsOwogICAgfQogICAgRm9vICh2b2lkKiBQb2ludGVyLCBib29sIEZsYWcpIDogYWRkcmVzcyhQb2ludGVyKSwgdGVzdEZsYWcoRmxhZykKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkZvbyAodm9pZCosIGJvb2wpIGNvbnN0cnVjdG9yIGNhbGxlZCIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKaW50IG1haW4odm9pZCkKewogICAgc3RkOjpzaXplX3QqIHRlc3QgPSBuZXcgc3RkOjpzaXplX3Q7CiAgICAKICAgIEZvbyBhICh0ZXN0KTsKICAgIHN0ZDo6Y291dCA8PCBhLmFkZHJlc3MgPDwgJyAnIDw8IGEudGVzdEZsYWcgPDwgc3RkOjplbmRsOwogICAgCiAgICBGb28gYiAoZmFsc2UpOwogICAgc3RkOjpjb3V0IDw8IGIuYWRkcmVzcyA8PCAnICcgPDwgYi50ZXN0RmxhZyA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIEZvbyBjICh0cnVlKTsKICAgIHN0ZDo6Y291dCA8PCBjLmFkZHJlc3MgPDwgJyAnIDw8IGMudGVzdEZsYWcgPDwgc3RkOjplbmRsOwogICAgCiAgICBGb28gZDsKICAgIHN0ZDo6Y291dCA8PCBkLmFkZHJlc3MgPDwgJyAnIDw8IGQudGVzdEZsYWcgPDwgc3RkOjplbmRsOwogICAgCiAgICBGb28gZSAodGVzdCwgdHJ1ZSk7CiAgICBzdGQ6OmNvdXQgPDwgZS5hZGRyZXNzIDw8ICcgJyA8PCBlLnRlc3RGbGFnIDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgZGVsZXRlIHRlc3Q7Cn0=