Commit bfa58951 by Jason Merrill Committed by Jason Merrill

DR 5 PR c++/60019

	DR 5
	PR c++/60019
	* call.c (build_user_type_conversion_1): The copy-init temporary
	is cv-unqualified.

From-SVN: r210284
parent fc2bfea1
2014-05-09 Jason Merrill <jason@redhat.com>
DR 5
PR c++/60019
* call.c (build_user_type_conversion_1): The copy-init temporary
is cv-unqualified.
PR c++/58714
* tree.c (stabilize_expr): A stabilized prvalue is an xvalue.
......
......@@ -3693,11 +3693,20 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags,
return cand;
}
tree convtype;
if (!DECL_CONSTRUCTOR_P (cand->fn))
convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
else if (cand->second_conv->kind == ck_rvalue)
/* DR 5: [in the first step of copy-initialization]...if the function
is a constructor, the call initializes a temporary of the
cv-unqualified version of the destination type. */
convtype = cv_unqualified (totype);
else
convtype = totype;
/* Build the user conversion sequence. */
conv = build_conv
(ck_user,
(DECL_CONSTRUCTOR_P (cand->fn)
? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
convtype,
build_identity_conv (TREE_TYPE (expr), expr));
conv->cand = cand;
if (cand->viable == -1)
......
// CWG 5
struct C { };
C c;
struct A {
A(const A&);
A(const C&);
};
const volatile A a = c; // Okay
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