Próbowałem skompilować ten kod:Korzystanie adaptery Podbijanie przy C++ 11 lambdas
#include <boost/range/adaptors.hpp>
#include <boost/range/algorithm.hpp>
#include <vector>
int main() {
std::vector<int> v{
1,5,4,2,8,5,3,7,9
};
std::cout << *boost::min_element(v | boost::adaptors::transformed(
[](int i) { return -i; })) << std::endl;
return 0;
}
Kompilacja nie powiodła się z następującym komunikatem o błędzie (po długim szablonu konkretyzacji powieści):
/usr/local/include/boost/iterator/transform_iterator.hpp:84:26: error: use of deleted function ‘main()::<lambda(int)>::<lambda>()’
../main.cpp:12:5: error: a lambda closure type has a deleted default constructor
Przeanalizowałem ten problem i znalazłem this w archiwum listy adresowej dla użytkowników boost. Sugerował on, że rozwiązanie problemu może rozwiązać za pomocą metody #define BOOST_RESULT_OF_USE_DECLTYPE
. Umieściłem go na samym początku mojego kodu, ale nadal się nie kompiluje. Długość komunikatu o błędzie wydaje się być znacznie krótsza, ale komunikat o błędzie na końcu jest taki sam. Obecnie używam Boost 1.50.
Co może stanowić problem? Czy jest jakiś sposób, aby to zadziałało?
Myślę, że potrzebujesz 1,51. Przynajmniej to właśnie sprawiło, że zadziałało to dla mnie. – Gurgeh