[Bug c++/90846] New: Concepts sometimes ignored for friend function templates of class templates
david at doublewise dot net
gcc-bugzilla@gcc.gnu.org
Tue Jun 11 23:42:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90846
Bug ID: 90846
Summary: Concepts sometimes ignored for friend function
templates of class templates
Product: gcc
Version: 9.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: david at doublewise dot net
Target Milestone: ---
The following code reports ambiguous overload when compiling with `g++
-std=c++2a -fconcepts`:
template<typename>
struct S {
template<typename T>
friend constexpr auto f(S, S<T>) {
return true;
}
template<typename T> requires false
friend constexpr auto f(S, T) {
return false;
}
template<typename T> requires false
friend constexpr auto f(T, S) {
return false;
}
};
static_assert(f(S<int>{}, S<int>{}));
It complains that all three functions are viable overloads. Deleting the second
overload makes gcc complain the that two remaining functions are ambiguous, but
deleting the third overload makes gcc happy and accept the code.
See it live: https://godbolt.org/z/wG3Isj
More information about the Gcc-bugs
mailing list