Commit 66753821 by Jason Merrill Committed by Jason Merrill

re PR c++/46497 ([C++0x] Defaulted vs declared move constructor vs is_convertible)

	PR c++/46497
	* call.c (build_over_call): Check for =delete even when trivial.

From-SVN: r166851
parent bf4c0738
2010-11-16 Jason Merrill <jason@redhat.com> 2010-11-16 Jason Merrill <jason@redhat.com>
PR c++/46497
* call.c (build_over_call): Check for =delete even when trivial.
DR 1004 DR 1004
* decl.c (make_unbound_class_template): Handle using * decl.c (make_unbound_class_template): Handle using
injected-type-name as template. injected-type-name as template.
......
...@@ -6057,7 +6057,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) ...@@ -6057,7 +6057,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
} }
/* [class.copy]: the copy constructor is implicitly defined even if /* [class.copy]: the copy constructor is implicitly defined even if
the implementation elided its use. */ the implementation elided its use. */
else if (!trivial) else if (!trivial || DECL_DELETED_FN (fn))
{ {
mark_used (fn); mark_used (fn);
already_used = true; already_used = true;
...@@ -6086,7 +6086,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) ...@@ -6086,7 +6086,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
} }
} }
else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR else if (DECL_OVERLOADED_OPERATOR_P (fn) == NOP_EXPR
&& trivial_fn_p (fn)) && trivial_fn_p (fn)
&& !DECL_DELETED_FN (fn))
{ {
tree to = stabilize_reference tree to = stabilize_reference
(cp_build_indirect_ref (argarray[0], RO_NULL, complain)); (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
......
2010-11-16 Jason Merrill <jason@redhat.com> 2010-11-16 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/defaulted20.C: New.
* g++.dg/template/injected2.C: New. * g++.dg/template/injected2.C: New.
2010-11-17 Nicola Pero <nicola.pero@meta-innovation.com> 2010-11-17 Nicola Pero <nicola.pero@meta-innovation.com>
......
// PR c++/46497
// { dg-options -std=c++0x }
struct A {
A(A&&) = default; // { dg-message "A::A" }
};
struct B {
const A a;
B(const B&) = default;
B(B&&) = default; // { dg-error "implicitly deleted|no match" }
};
void g(B); // { dg-error "argument 1" }
B&& f();
int main()
{
g(f()); // { dg-error "deleted" }
}
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