boost::xpressive Error 2668 call to amibous function

Hi! I get the error C2668 if i try to compile the following code(xpressive example from docs): #include <string> #include <iostream> #include <boost/xpressive/xpressive.hpp> #include <boost/xpressive/regex_actions.hpp> #include <map> using namespace boost::xpressive; int main() { std::map<std::string, int> result; std::string str("aaa=>1 bbb=>23 ccc=>456"); // Match a word and an integer, separated by =>, // and then stuff the result into a std::map<> sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )[ ref(result)[s1] = as<int>(s2) ]; // Match one or more word/integer pairs, separated // by whitespace. sregex rx = pair >> *(+_s >> pair); if(regex_match(str, rx)) { std::cout << result["aaa"] << '\n'; std::cout << result["bbb"] << '\n'; std::cout << result["ccc"] << '\n'; } return 0; } The complete error: D:\Projekte\xpressive-test\main.cpp:29: Fehler:C2668: 'boost::xpressive::ref' : ambiguous call to overloaded function D:\Frameworks\boost\boost_147\boost/xpressive/regex_actions.hpp(850): could be 'const boost::xpressive::reference<T> boost::xpressive::ref<std::map<_Kty,_Ty>>(T &)' with [ T=std::map<std::string,int>, _Kty=std::string, _Ty=int ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xrefwrap(439): or 'std::tr1::reference_wrapper<_Ty> std::tr1::ref<std::map<_Kty,int>>(_Ty &)' [found using argument-dependent lookup] with [ _Ty=std::map<std::string,int>, _Kty=std::string ] while trying to match the argument list '(std::map<_Kty,_Ty>)' with [ _Kty=std::string, _Ty=int ] What's the problem here? Thank you very much!

Hi Jens! you need a ref() function from namespace boost::xpressive. like this: http://liveworkspace.org/code/a5de4abb522fb95f5636640af604b349 Regards! niXman. 2011/9/8 Jens Saathoff <jensesaat@googlemail.com>
Hi!
I get the error C2668 if i try to compile the following code(xpressive example from docs):
#include <string>
#include <iostream>
#include <boost/xpressive/xpressive.hpp>
#include <boost/xpressive/regex_actions.hpp>
#include <map>
using namespace boost::xpressive;
int main()
{
std::map<std::string, int> result;
std::string str("aaa=>1 bbb=>23 ccc=>456");
// Match a word and an integer, separated by =>,
// and then stuff the result into a std::map<>
sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )[ ref(result)[s1] = as<int>(s2) ];
// Match one or more word/integer pairs, separated
// by whitespace.
sregex rx = pair >> *(+_s >> pair);
if(regex_match(str, rx))
{
std::cout << result["aaa"] << '\n';
std::cout << result["bbb"] << '\n';
std::cout << result["ccc"] << '\n';
}
return 0;
}
The complete error:
D:\Projekte\xpressive-test\main.cpp:29: Fehler:C2668: 'boost::xpressive::ref' : ambiguous call to overloaded function D:\Frameworks\boost\boost_147\boost/xpressive/regex_actions.hpp(850): could be 'const boost::xpressive::reference<T> boost::xpressive::ref<std::map<_Kty,_Ty>>(T &)' with [ T=std::map<std::string,int>, _Kty=std::string, _Ty=int ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xrefwrap(439): or 'std::tr1::reference_wrapper<_Ty> std::tr1::ref<std::map<_Kty,int>>(_Ty &)' [found using argument-dependent lookup] with [ _Ty=std::map<std::string,int>, _Kty=std::string ] while trying to match the argument list '(std::map<_Kty,_Ty>)' with [ _Kty=std::string, _Ty=int ]
What's the problem here?
Thank you very much!
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

Yes, shame on me. using namespace boost::xpressive; was the only i added, not ref. Thank you very much! 2011/9/7 niXman <i.nixman@gmail.com>
Hi Jens!
you need a ref() function from namespace boost::xpressive. like this: http://liveworkspace.org/code/a5de4abb522fb95f5636640af604b349
Regards! niXman.
2011/9/8 Jens Saathoff <jensesaat@googlemail.com>
Hi!
I get the error C2668 if i try to compile the following code(xpressive example from docs):
#include <string>
#include <iostream>
#include <boost/xpressive/xpressive.hpp>
#include <boost/xpressive/regex_actions.hpp>
#include <map>
using namespace boost::xpressive;
int main()
{
std::map<std::string, int> result;
std::string str("aaa=>1 bbb=>23 ccc=>456");
// Match a word and an integer, separated by =>,
// and then stuff the result into a std::map<>
sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) )[ ref(result)[s1] = as<int>(s2) ];
// Match one or more word/integer pairs, separated
// by whitespace.
sregex rx = pair >> *(+_s >> pair);
if(regex_match(str, rx))
{
std::cout << result["aaa"] << '\n';
std::cout << result["bbb"] << '\n';
std::cout << result["ccc"] << '\n';
}
return 0;
}
The complete error:
D:\Projekte\xpressive-test\main.cpp:29: Fehler:C2668: 'boost::xpressive::ref' : ambiguous call to overloaded function D:\Frameworks\boost\boost_147\boost/xpressive/regex_actions.hpp(850): could be 'const boost::xpressive::reference<T> boost::xpressive::ref<std::map<_Kty,_Ty>>(T &)' with [ T=std::map<std::string,int>, _Kty=std::string, _Ty=int ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xrefwrap(439): or 'std::tr1::reference_wrapper<_Ty> std::tr1::ref<std::map<_Kty,int>>(_Ty &)' [found using argument-dependent lookup] with [ _Ty=std::map<std::string,int>, _Kty=std::string ] while trying to match the argument list '(std::map<_Kty,_Ty>)' with [ _Kty=std::string, _Ty=int ]
What's the problem here?
Thank you very much!
_______________________________________________ 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
participants (2)
-
Jens Saathoff
-
niXman