int main(int argc, char *argv[]) { OptionParser parser; Expected<ParsedCommand> parsed = parser.parseCommand(argc, argv); if (!parsed.isOk()) { Logger::error(parsed.getMessage()); printUsage(parser); return parsed.getCode(); } ParsedCommand command = parsed.get(); Logger::init(command.isVerbose()); if (command.isUsageIssued()) { printUsage(parser); return 0; } Expected<Visitor> vRes = Visitor::create(command); if (!vRes.isOk()) { Logger::error(vRes.getMessage()); printUsage(parser); return vRes.getCode(); } Visitor &v = vRes.get(); boost::mpl::for_each<desc_type>(boost::ref(v)); Expected<void> result = v.getResult(); if (!result.isOk()) { Logger::error(result.getMessage()); return result.getCode(); } return 0; }