It doesn't seem correct to copy the command in CustomizedTool, since
often the derived class will want to use a different command anyway.
if(&tool!=this && tool.get_base_tool()!=this)
throw invalid_argument("Tool::prepare");
if(&tool!=this && tool.get_base_tool()!=this)
throw invalid_argument("Tool::prepare");
+ if(&tool!=this && !command.empty() && tool.command.empty())
+ throw logic_error("Derived tool has no command");
+