I am using program_options on an app that I am compiling for
linux and windows (vs2005). I have found that long option descriptions cause a
fatal error on windows when they are long enough that they need to wrap to the
next line. (I’m having no problem in linux). If I run the debug version I
get an assertion failed in xstring. Release just gives a fatal error.
The following code causes the problem:
#include <iostream>
#include <boost/program_options.hpp>
using namespace std;
namespace po =
boost::program_options;
using namespace boost;
int main( int argc, char *argv[] )
{
string tmp;
// Declare a group of options that will be
// allowed only on command line
po::options_description
cmdline_options("Usage:
programOptionsTest [options] - Allowed Options blah blah blah blah blah blah
blah blah");
cmdline_options.add_options()
("help,h", "produce this help message a b
c d e f g h i j k l m n o p");
cout <<
cmdline_options << endl;
cin >> tmp;
return 0;
}
Note that the “blah blah blah…”
part is wrapped ok, but the “help” line need to wrap after the “o”
and crashes. If I remove the “p” from the string then it doesn’t
need to wrap and everything is ok. (You might need to adjust the string to
cause wrapping if you console width is different then mine.)
/**************************************
* Scott Finley
* Research Software Engineer
* TomoTherapy Inc.
* Email: sfinley@tomotherapy.com
* Phone: 608.824.3381
***/