The following code fails to compile for me on Apple Clang (Apple LLVM version 8.0.0 (clang-800.0.42.1; Target: x86_64-apple-darwin15.6.0):
#include <clara.hpp>
#include <string>
int main(int argc, char** argv) {
bool showHelp = false;
auto parsePlayerPos = [](const std::string& playerPosString) { /* Do something here */ };
using namespace clara;
auto commandLineParser =
Help(showHelp)
| Opt(parsePlayerPos, "player-pos")
["--player-pos"]
("Some text here");
return 0;
}
if I specify the lambda expression inline, it works, i.e.:
Opt([](const std::string& playerPosString) { /* Do something here */ }, "player-pos")
The error message I get is:
In file included from /Users/lethal-guitar/RigelEngine/src/main.cpp:20:
/Users/lethal-guitar/RigelEngine/3rd_party/clara/clara.hpp:640:12: error: invalid operands to binary expression ('std::stringstream'
(aka 'basic_stringstream<char>') and '(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)')
ss >> target;
~~ ^ ~~~~~~
/Users/lethal-guitar/RigelEngine/3rd_party/clara/clara.hpp:690:20: note: in instantiation of function template specialization
'clara::detail::convertInto<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)>' requested here
return convertInto( arg, m_ref );
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:2125:7: note: in instantiation of member function
'clara::detail::BoundValueRef<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)>::setValue' requested here
class __libcpp_compressed_pair_imp<_T1, _T2, 1>
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:4411:26: note: in instantiation of function template specialization
'std::__1::__shared_ptr_emplace<clara::detail::BoundValueRef<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)>,
std::__1::allocator<clara::detail::BoundValueRef<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)> >
>::__shared_ptr_emplace<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25) &>' requested here
::new(__hold2.get()) _CntrlBlk(__a2, _VSTD::forward<_Args>(__args)...);
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:4775:29: note: in instantiation of function template specialization
'std::__1::shared_ptr<clara::detail::BoundValueRef<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)>
>::make_shared<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25) &>' requested here
return shared_ptr<_Tp>::make_shared(_VSTD::forward<_Args>(__args)...);
^
/Users/lethal-guitar/RigelEngine/3rd_party/clara/clara.hpp:817:25: note: in instantiation of function template specialization
'std::__1::make_shared<clara::detail::BoundValueRef<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)>, (lambda at
/Users/lethal-guitar/RigelEngine/src/main.cpp:29:25) &>' requested here
: m_ref( std::make_shared<BoundValueRef<T>>( ref ) ),
^
/Users/lethal-guitar/RigelEngine/3rd_party/clara/clara.hpp:946:50: note: in instantiation of function template specialization
'clara::detail::ParserRefImpl<clara::detail::Opt>::ParserRefImpl<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)>'
requested here
Opt( T &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {}
^
/Users/lethal-guitar/RigelEngine/src/main.cpp:35:7: note: in instantiation of function template specialization
'clara::detail::Opt::Opt<(lambda at /Users/lethal-guitar/RigelEngine/src/main.cpp:29:25)>' requested here
| Opt(parsePlayerPos, "player-pos")
The following code fails to compile for me on Apple Clang (
Apple LLVM version 8.0.0 (clang-800.0.42.1; Target: x86_64-apple-darwin15.6.0
):if I specify the lambda expression inline, it works, i.e.:
The error message I get is:
I'm using Clara v. 1.1.2.