c++: Fix constrained conversion op.
We don't want to promote a conversion from viable == 0 to viable == -1. Found in ranges-v3. gcc/cp/ChangeLog 2020-02-28 Jason Merrill <jason@redhat.com> * call.c (build_user_type_conversion_1): Don't look at the second conversion of a non-viable candidate.
This commit is contained in:
parent
4735f92d48
commit
586b016cd4
@ -1,3 +1,8 @@
|
||||
2020-02-28 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* call.c (build_user_type_conversion_1): Don't look at the second
|
||||
conversion of a non-viable candidate.
|
||||
|
||||
2020-02-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
P1937R2 - Fixing inconsistencies between const{expr,eval} functions
|
||||
|
@ -4083,6 +4083,10 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags,
|
||||
|
||||
for (cand = candidates; cand != old_candidates; cand = cand->next)
|
||||
{
|
||||
if (cand->viable == 0)
|
||||
/* Already rejected, don't change to -1. */
|
||||
continue;
|
||||
|
||||
tree rettype = TREE_TYPE (TREE_TYPE (cand->fn));
|
||||
conversion *ics
|
||||
= implicit_conversion (totype,
|
||||
|
15
gcc/testsuite/g++.dg/cpp2a/concepts-conv1.C
Normal file
15
gcc/testsuite/g++.dg/cpp2a/concepts-conv1.C
Normal file
@ -0,0 +1,15 @@
|
||||
// { dg-do compile { target concepts } }
|
||||
|
||||
template <class T> concept False = false;
|
||||
|
||||
template <class T>
|
||||
struct A
|
||||
{
|
||||
explicit operator bool ();
|
||||
explicit operator bool () requires False<T>;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
int i { A<int>() }; // { dg-error "" }
|
||||
}
|
Loading…
Reference in New Issue
Block a user