Commit 49fe93f4 by Jason Merrill Committed by Jason Merrill

PR c++/51079, DR 495

	PR c++/51079, DR 495
	* call.c (joust): Check the second conversion sequence
	before checking templates.

From-SVN: r181270
parent c68b1bc7
2011-11-10 Jason Merrill <jason@redhat.com>
PR c++/51079, DR 495
* call.c (joust): Check the second conversion sequence
before checking templates.
2011-11-09 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50837
......
......@@ -8109,6 +8109,22 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
if (winner)
return winner;
/* DR 495 moved this tiebreaker above the template ones. */
/* or, if not that,
the context is an initialization by user-defined conversion (see
_dcl.init_ and _over.match.user_) and the standard conversion
sequence from the return type of F1 to the destination type (i.e.,
the type of the entity being initialized) is a better conversion
sequence than the standard conversion sequence from the return type
of F2 to the destination type. */
if (cand1->second_conv)
{
winner = compare_ics (cand1->second_conv, cand2->second_conv);
if (winner)
return winner;
}
/* or, if not that,
F1 is a non-template function and F2 is a template function
specialization. */
......@@ -8137,21 +8153,6 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
return winner;
}
/* or, if not that,
the context is an initialization by user-defined conversion (see
_dcl.init_ and _over.match.user_) and the standard conversion
sequence from the return type of F1 to the destination type (i.e.,
the type of the entity being initialized) is a better conversion
sequence than the standard conversion sequence from the return type
of F2 to the destination type. */
if (cand1->second_conv)
{
winner = compare_ics (cand1->second_conv, cand2->second_conv);
if (winner)
return winner;
}
/* Check whether we can discard a builtin candidate, either because we
have two identical ones or matching builtin and non-builtin candidates.
......
2011-11-10 Jason Merrill <jason@redhat.com>
PR c++/51079
* g++.dg/template/conv12.C: New.
PR debug/50983
* gcc.dg/debug/dwarf2/asm-line1.c: New.
......
// PR c++/51079
#if __cplusplus > 199711L
struct C1
{
template <class T>
operator T() = delete; // { dg-message "declared here" "" { target c++11 } }
operator bool() { return false; }
} c1;
int ic1 = c1; // { dg-error "deleted" "" { target c++11 } }
int ac1 = c1 + c1; // { dg-error "deleted" "" { target c++11 } }
#endif
struct C2
{
private:
template <class T>
operator T(); // { dg-error "private" }
public:
operator bool() { return false; }
} c2;
int ic2 = c2; // { dg-error "" }
int ac2 = c2 + c2; // { dg-error "" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment