Thanks to both for your feedback, for 'cleaner' solutions to 1 and 2 I'd:
Code:
//1;
bool is_special(std::string result) {
return result == "special";
}
//2.
cin>>size;
Coord coords[size];
//... as before;
I've just drunk the smart-pointer Kool Aid and therefore wherever I saw a raw pointer my inclination was indeed to get rid of it and replace it with a smart one. Such a sledgehammer approach is probably (definitely?) wrong and when I read Elysia's comments in #13 I realised that there are severe limitations to this approach.