You should start with a few tutorials [1][2] to understand how boost::program_options
works.
Then, you can define two mutually exclusive options simply defining a small function as explained in real.cpp. For example, you can specify two conflicting (or depending) options defining a conflicting_options()
function:
void conflicting_options(const boost::program_options::variables_map & vm,
const std::string & opt1, const std::string & opt2)
{
if (vm.count(opt1) && !vm[opt1].defaulted() &&
vm.count(opt2) && !vm[opt2].defaulted())
{
throw std::logic_error(std::string("Conflicting options '") +
opt1 + "' and '" + opt2 + "'.");
}
}
and then calling
conflicting_options (vm, "quiet", "verbose");
right after boost::program_options::store()
I still don't understand if it's possible to define two mutually exclusive positional options, but that should be another question.