https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92272
Bug ID: 92272 Summary: concepts check failed: std::vector iterator and std::string iterator are not contiguous iterator. Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: euloanty at live dot com CC: jwakely at redhat dot com Target Milestone: --- Created attachment 47128 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47128&action=edit vector<T>::iterator contiguous_iterator concepts fail Thank you for your hard work for concepts and ranges. However, the std::contiguous_iterator concepts failed for checking std::vector and std::string. I did the same on Visual C++ Preview. VC works (although vc does not support concept auto). cqwrteur@DESKTOP-7H7UHQ9:/mnt/d$ g++ -o a a.cc -O2 -std=c++2a -fconcepts a.cc: In function ‘int main()’: a.cc:11:53: error: deduced initializer does not satisfy placeholder constraints 11 | std::contiguous_iterator auto vec_iter(vec.cbegin()); | ^ a.cc:11:53: note: constraints not satisfied In file included from a.cc:1: /usr/local/include/c++/10.0.0/concepts:67:28: note: ‘std::contiguous_iterator_tag’ is not a base of ‘std::random_access_iterator_tag’ 67 | concept derived_from = __is_base_of(_Base, _Derived) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ a.cc:15:53: error: deduced initializer does not satisfy placeholder constraints 15 | std::contiguous_iterator auto str_iter(str.cbegin()); | ^ a.cc:15:53: note: constraints not satisfied In file included from a.cc:1: /usr/local/include/c++/10.0.0/concepts:67:28: note: ‘std::contiguous_iterator_tag’ is not a base of ‘std::random_access_iterator_tag’ 67 | concept derived_from = __is_base_of(_Base, _Derived) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cqwrteur@DESKTOP-7H7UHQ9:/mnt/d$ gcc --version gcc (cqwrteur) 10.0.0 20191029 (experimental) Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #include<concepts> #include<string> #include<string_view> #include<iterator> #include<vector> #include<deque> int main() { std::vector<std::size_t> vec; std::contiguous_iterator auto vec_iter(vec.cbegin()); std::string_view sv; std::contiguous_iterator auto sv_iter(sv.cbegin()); std::string str; std::contiguous_iterator auto str_iter(str.cbegin()); std::deque<std::size_t> dq; std::random_access_iterator auto dq_iter(dq.cbegin()); static_assert(!std::contiguous_iterator<decltype(dq_iter)>,"deque iterator should not be a contiguous_iterator"); }