in example/calendar.cpp [314:358]
int main(int argc, char *argv[]) try {
// Declare the supported options.
po::options_description desc("Allowed options");
desc.add_options()
("help", "produce help message")
("start", po::value<unsigned short>(), "Year to start")
("stop", po::value<std::string>(), "Year to stop")
("per-line", po::value<std::size_t>()->default_value(3u), "Nbr of months per line")
;
po::positional_options_description p;
p.add("start", 1).add("stop", 1);
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).
options(desc).positional(p).run(), vm);
po::notify(vm);
if(vm.count("help") || 1 != vm.count("start")) {
std::cerr << desc << '\n';
return 1;
}
auto const start = vm["start"].as<unsigned short>();
auto const stop = 0 == vm.count("stop") ?
(unsigned short)(start + 1) :
vm["stop"].as<std::string>() == "never" ?
(unsigned short)-1 :
boost::lexical_cast<unsigned short>(vm["stop"].as<std::string>());
auto const months_per_line = vm["per-line"].as<std::size_t>();
if(stop != (unsigned short)-1 && stop <= start) {
std::cerr << "ERROR: The stop year must be larger than the start" << '\n';
return 1;
}
if((unsigned short)-1 != stop) {
copy(dates(start, stop) | format_calendar(months_per_line),
ostream_iterator<>(std::cout, "\n"));
}
else {
copy(dates_from(start) | format_calendar(months_per_line),
ostream_iterator<>(std::cout, "\n"));
}
}