AMDG Zachary Turner wrote:
It seems very simple, but it's not compiling.
int translate(const std::string& str) { return 0; }
//all required using declarations are present but omitted for brevity // options_description options; variables_map values; int i;
options.add_options() ("test", valuestd::string()->notifier(var(i) = translate(_1)));
I get the following error:
'translate': cannot convert parameter 1 from 'boost::lambda::placeholder1_type' to 'std::string'. No user defined conversion operator available that can perform this conversion, or the operator cannot be called.
Is this type of usage unsupported for some reason?
It's unsupported because C++ doesn't allow Boost.Lambda to magically create overloads of every function that you might want to use with it. Not to mention that if this usage did work, then trying to pass a lambda functor to a function would be ambiguous with trying to compose a larger lambda expression. Use bind. http://tinyurl.com/nkhuez.
If I change the variable declaration and the add_options() call to the following it works fine:
std::string s
options.add_options() ("test", valuestd::string()->notifier(var(s) = _1));
In Christ, Steven Watanabe