Hi, 

Somehow I keep getting exceptions related to the use of strings when I compile my program in Xcode. If I use strings in my program arguments I get an bad_any_cast exception from the store() method.

If I compile the same program from the command line directly it works fine, but I can't seem to figure out what the difference is between the two build commands that is causing this behavior.

I compiled the program from the command line like this:
g++-4.2  -arch i386 -I/opt/local/include -L/opt/local/lib -lboost_program_options-mt -o waveform_manbuild main.cpp

Xcode uses the following:

CompileC build/waveform.build/Release/waveform.build/Objects-normal/i386/main.o main.cpp normal i386 c++ com.apple.compilers.gcc.4_2

cd /Users/foo/waveform

setenv LANG en_US.US-ASCII

/Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -Os -mdynamic-no-pic -Wreturn-type -Wunused-variable -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -mmacosx-version-min=10.5 -gdwarf-2 -iquote /Users/foo/waveform/build/waveform.build/Release/waveform.build/waveform-generated-files.hmap -I/Users/foo/waveform/build/waveform.build/Release/waveform.build/waveform-own-target-headers.hmap -I/Users/foo/waveform/build/waveform.build/Release/waveform.build/waveform-all-target-headers.hmap -iquote /Users/foo/waveform/build/waveform.build/Release/waveform.build/waveform-project-headers.hmap -F/Users/foo/waveform/build/Release -I/Users/foo/waveform/build/Release/include -I/opt/local/include -I/Users/foo/waveform/build/waveform.build/Release/waveform.build/DerivedSources/i386 -I/Users/foo/waveform/build/waveform.build/Release/waveform.build/DerivedSources -c /Users/foo/waveform/main.cpp -o /Users/foo/waveform/build/waveform.build/Release/waveform.build/Objects-normal/i386/main.o


The (very simple) test program is listed below. I hope someone can spot the problem. It's driving me nuts.

Cheers,
Thijs

PS: I'm using OS10.6.1 and Xcode 3.2.1



#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/program_options.hpp>

using namespace std;
namespace po = boost::program_options;

int main (int ac, char * av[]) {
po::options_description desc("Allowed options");
desc.add_options()
   ("help", "produce help message")
   ("input-file,i", po::value< vector<string> >(), "input file")
;

po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm); /// << exception thrown here
po::notify(vm);    

if (vm.count("help")) {
   cout << desc << "\n";
   return 1;
}
if (vm.count("input-file")) {
   vector<string> input_files = vm["input-file"].as< vector<string> >();
vector<string>::const_iterator it = input_files.begin();
for(; it!=input_files.end(); ++it)
cout<< *it << endl;
} else {
   cout << "No input file(s).\n";
}
return 0;
}