https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66091
Bug ID: 66091
Summary: [c++-concepts] Overloading of member operators based
on constraints rejected; regression from r211591
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: tom at honermann dot net
Target Milestone: ---
The following test case was accepted by r211591 of the c++-concepts branch, but
is rejected by r222769. My interpretation of N4377 is that this test case
should be accepted.
$ cat t.cpp
template<typename T>
concept bool C1() {
return requires() { typename T::type1; };
}
template<typename T>
concept bool C2() {
return C1<T>()
&& requires() { typename T::type2; };
}
template<C1 T>
struct S {
S& operator++()
{ return *this; }
S& operator++()
requires C2<T>()
{ return *this; }
};
# Compiling with r222769:
$ g++ -c -std=c++1z t.cpp
t.cpp:14:8: error: ‘S<T>& S<T>::operator++()’ cannot be overloaded
S& operator++()
^
t.cpp:12:8: error: with ‘S<T>& S<T>::operator++()’
S& operator++()
^