Clang 3.8.1 với libC++ biên dịch chương trình sau đây:Clang vs gcc std :: crbegin với 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;
}
Nhưng gcc 6.1.0 với libstdC++ thì không. Dòng đầu tiên của lỗi gcc là:
error: no matching function for call to 'crbegin(const boost::iterator_range<__gnu_cxx::__normal_iterator<const int*, std::vector<int> > >&
Ai là đúng?
Note: phiên bản Boost 1,61
Gcc bị lỗi gì? – aschepler
@aschepler Tôi đã thêm dòng đầu tiên của lỗi - phần còn lại không thêm nhiều. Tương tự cho 'std :: crend'. Tôi thực sự nghĩ gcc là đúng ở đây - không có phương thức thành viên 'rbegin' hoặc' rend' trong 'boost :: iterator_range'. Tôi không hiểu Clang đang làm thế nào! – Daniel
@Daniel: Bạn có đang sử dụng Clang với libC++ hoặc libstdC++ không? Nếu trước đây, có lẽ nó gọi 'std :: make_reverse_iterator (range.begin())' nếu không có hàm thành viên 'rbegin' hiện diện. Nếu sau này, thì câu hỏi hay là ... – ildjarn