Yup, now it works.
Good.
For reference, I got rid of the duplicated bk::eol also by using the folloing code:
bk::generate(ostream_iterator<char>(cout), "Command line options not recognized:\n" << (" \"" << ba::string << '"' << bk::eol) % "", vsTest);
If you don't need any separators in between the list items you could write: bk::generate(ostream_iterator<char>(cout), "Command line options not recognized:\n" << *(" \"" << ba::string << '"') << bk::eol, vsTests); (which is the equivalent of a Kleene Star). BTW, Karma has a different API allowing to directly integrate the code above with output streams: cout << karma::format( *(" \"" << ascii::string << '"') << eol , vsTest ); where format is a std::stream manipulator. Regards Hartmut
Not putting an empty char array after the modulus operator would be invalid C++ and is thus required.
Thanks again, Best, Diederick
On Mon, Aug 24, 2009 at 1:45 PM, Diederick C. Niehorster
wrote: Dear OvermindDL1,
That solves the issue then, I'm using Boost 1.39 ;)
Let me try trunk, all should work fine then. I have seen the other thread in which the location of sprit v2.1's doc were disclosed, however i didn't connect those threads for some reason.
Thanks again!
Best, Diederick
On Mon, Aug 24, 2009 at 1:36 PM, OvermindDL1
wrote: On Sun, Aug 23, 2009 at 11:20 PM, Diederick C. Niehorster
wrote: That also gave me compilation errors:
..\Dependency\boost\boost/spirit/home/karma/generate.hpp(72) : error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************(__thiscall boost::spirit::karma::generate::error_invalid_expression::* ***********)(Expr)' to 'boost::mpl::assert<false>::type'
..\Dependency\boost\boost/spirit/home/karma/generate.hpp(76) : error C2039: 'generate' : is not a member of 'boost::proto::exprns_::expr
' Below, please find a minimal example. Thank you for your continued help!
Best, Dee
--- #include <vector> #include <string> #include <iostream> using namespace std; #include
namespace bk = boost::spirit::karma; namespace ba = boost::spirit::ascii; int main() { vector<string> vsTest; vsTest.push_back("test"); vsTest.push_back("t2"); vsTest.push_back("t3");
bk::generate(ostream_iterator<char>(cout), "Command line options not recognized:\n" << (" \"" << ba::string % ("\"" << bk::eol)) << "\"" << bk::eol, vsTest);
bk::generate(ostream_iterator<char>(cout), "Command line options not recognized:\n" << ('\"' << ba::string << '\"') % bk::eol << bk::eol, vsTest);
return 0; } ---
This is what I get when I compile with your test: 1>------ Build started: Project: pure_testing, Configuration: Release Win32 ------ 1>Compiling... 1>main.cpp 1>using native typeof 1>Linking... 1>Generating code 1>Finished generating code 1>Embedding manifest... 1>Build Time 0:27 1>Build log was saved at "file://r:\Programming_Projects\pure_testing\Release\BuildLog.htm" 1>pure_testing - 0 error(s), 0 warning(s) ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Looks like it works perfect to me. You are using Boost Trunk like I stated in my first post in this thread, right?
You should still use this grammar though, it is the best: bk::generate(ostream_iterator<char>(cout), "Command line options not recognized:\n" << (" \"" << ba::string << '\"') % bk::eol ,vsTest); And yes, I confirmed it compiles and runs as you want. _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users