Как я могу использовать std::map
внутри лямбда-функции феникса?
#include <boost\phoenix.hpp>
#include <map>
int main() {
using namespace boost::phoenix;
using namespace boost::phoenix::arg_names;
using namespace std;
map<int, int> m;
auto foo = at(m, 3);
foo();
}
Почему это не работает?
Я получаю следующую ошибку:
C2440 'return': cannot convert from 'int' to 'std::pair<const _Kty,_Ty> ' xxx c:\lib\boost\phoenix\stl\container\container.hpp 167
В настоящее время я пользуюсь Visual Studio 2015 Community и использую библиотеку Boost 1.60.
Вместо того, чтобы использовать at
функция, использование operator[]
,
#include <boost/phoenix.hpp>
#include <map>
int main() {
std::map<int, int> m;
m[3] = 33;
auto foo = boost::phoenix::ref(m)[3];
std::cout << foo() << "\n";
}
Похоже, что реализация феникса at
ленивая функция использует value_type
[1] [2] определить тип результата, который является std::pair<const int,int>
в этом случае. тем не мение std::map<int,int>::at
просто возвращает reference
или же const_reference
,
Других решений пока нет …