int main()

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"));
    }
}