У меня проблемы с Boost.
Когда я пытаюсь запустить что-то так просто, как
#include <boost/function.hpp>
#include <boost/lambda/core.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/array.hpp>
int main()
{
boost::function<size_t(boost::array<size_t, 1>, size_t)> f =
boost::lambda::_1[boost::lambda::_2];
return 0;
}
Я вернусь:
error C2440: 'return' :
cannot convert from 'boost::lambda::detail::unspecified' to 'size_t'
(Да, я знаю, что могу использовать Boost.Phoenix и др., Но дело не в этом.)
подстрочный оператор в boost :: lambda поддерживает только следующие типы (из lambda/detail/operator_return_type_traits.hpp
моей установки буста 1,53):
A*
, A[N]
, std::map
, std::multimap
, std::deque
, std::vector
, std::basic_string
, Все остальное становится detail::unspecified
, который вы видите в диагностике вашего компилятора.
Чтобы boost.lambda делал то, что вам нужно, вы можете отправить патч на operator_return_type_traits.hpp
добавив поддержку boost::array
Других решений пока нет …