Clang 3.8.1 z libC++ kompiluje następujący program:Clang vs std :: crbegin gcc z boost :: iterator_range
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
#include <boost/range/iterator_range.hpp>
int main()
{
const std::vector<int> v {1, 2, 3};
const auto range = boost::make_iterator_range(v);
std::copy(std::crbegin(range), std::crend(range), std::ostream_iterator<int> {std::cout, " "});
std::cout << std::endl;
return 0;
}
Ale gcc 6.1.0 z libstdC++ nie robi. Pierwsza linia błędu gcc to:
error: no matching function for call to 'crbegin(const boost::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> > >&
Kto ma rację?
Uwaga wersja doładowania 1,61
Jakie błędy daje gcc? – aschepler
@aschepler Dodałem pierwszą linię błędu - reszta nie dodaje wiele. To samo dla 'std :: crend'. Właściwie uważam, że gcc jest tutaj poprawny - nie ma metody 'rbegin' lub' rend' member w 'boost :: iterator_range'. Po prostu nie bardzo rozumiem, jak Clang je wytwarza! – Daniel
@Daniel: Czy używasz Clang z libC++ lub libstdC++? Jeśli pierwsza, prawdopodobnie nazywa się 'std :: make_reverse_iterator (range.begin())' jeśli nie ma funkcji członkowskiej 'rbegin'. Jeśli to drugie, to naprawdę dobre pytanie ... – ildjarn