https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92273
Bug ID: 92273
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 47127
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47127&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");
}