#include <iostream>
#include <vector>
using namespace std;
class Foo
{
public:
Foo(vector<string> things, string place) : m_thingList(things)
{
std::cout << "in Foo ctor" << std::endl;
validatePlacePriorToAssignment(place);
}
virtual ~Foo() {}
private:
vector<string> m_thingList;
string m_validatedPlace;
void validatePlacePriorToAssignment(string p)
{
// do stuff to validate place; if not valid, throw exception
// else
m_validatedPlace = p;
}
};
class Bar : public Foo
{
public:
const string defaultPlace = "Validville";
Bar(vector<string> stuff) : Foo(stuff, defaultPlace)
{
std::cout << "in Bar ctor" << std::endl;
}
};
int main()
{
vector<string> allTheThings;
try { Bar bar(allTheThings); }
catch (...) { std::cout << "saddness" << std::endl; }
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRm9vCnsKcHVibGljOgoJRm9vKHZlY3RvcjxzdHJpbmc+IHRoaW5ncywgc3RyaW5nIHBsYWNlKSA6IG1fdGhpbmdMaXN0KHRoaW5ncykKCXsKCQlzdGQ6OmNvdXQgPDwgImluIEZvbyBjdG9yIiA8PCBzdGQ6OmVuZGw7CgkJdmFsaWRhdGVQbGFjZVByaW9yVG9Bc3NpZ25tZW50KHBsYWNlKTsKCX0KCQoJdmlydHVhbCB+Rm9vKCkge30KCQpwcml2YXRlOgoJdmVjdG9yPHN0cmluZz4gbV90aGluZ0xpc3Q7CglzdHJpbmcgbV92YWxpZGF0ZWRQbGFjZTsKCQoJdm9pZCB2YWxpZGF0ZVBsYWNlUHJpb3JUb0Fzc2lnbm1lbnQoc3RyaW5nIHApCgl7CgkJLy8gZG8gc3R1ZmYgdG8gdmFsaWRhdGUgcGxhY2U7IGlmIG5vdCB2YWxpZCwgdGhyb3cgZXhjZXB0aW9uCgkJLy8gZWxzZQoJCW1fdmFsaWRhdGVkUGxhY2UgPSBwOwoJfQp9OwoKY2xhc3MgQmFyIDogcHVibGljIEZvbwp7CnB1YmxpYzoKCWNvbnN0IHN0cmluZyBkZWZhdWx0UGxhY2UgPSAiVmFsaWR2aWxsZSI7CglCYXIodmVjdG9yPHN0cmluZz4gc3R1ZmYpIDogRm9vKHN0dWZmLCBkZWZhdWx0UGxhY2UpCgl7CgkJc3RkOjpjb3V0IDw8ICJpbiBCYXIgY3RvciIgPDwgc3RkOjplbmRsOwoJfQp9OwoKaW50IG1haW4oKQp7Cgl2ZWN0b3I8c3RyaW5nPiBhbGxUaGVUaGluZ3M7CgkKCXRyeSB7IEJhciBiYXIoYWxsVGhlVGhpbmdzKTsgfQoJY2F0Y2ggKC4uLikgeyBzdGQ6OmNvdXQgPDwgInNhZGRuZXNzIiA8PCBzdGQ6OmVuZGw7IH0KCQoJcmV0dXJuIDA7Cn0=