mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-25 07:00:35 +08:00
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
This commit is contained in:
parent
bf4c0738c0
commit
66753821b5
gcc
@ -1,5 +1,8 @@
|
||||
2010-11-16 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/46497
|
||||
* call.c (build_over_call): Check for =delete even when trivial.
|
||||
|
||||
DR 1004
|
||||
* decl.c (make_unbound_class_template): Handle using
|
||||
injected-type-name as template.
|
||||
|
@ -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
|
||||
the implementation elided its use. */
|
||||
else if (!trivial)
|
||||
else if (!trivial || DECL_DELETED_FN (fn))
|
||||
{
|
||||
mark_used (fn);
|
||||
already_used = true;
|
||||
@ -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
|
||||
&& trivial_fn_p (fn))
|
||||
&& trivial_fn_p (fn)
|
||||
&& !DECL_DELETED_FN (fn))
|
||||
{
|
||||
tree to = stabilize_reference
|
||||
(cp_build_indirect_ref (argarray[0], RO_NULL, complain));
|
||||
|
@ -1,5 +1,7 @@
|
||||
2010-11-16 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/cpp0x/defaulted20.C: New.
|
||||
|
||||
* g++.dg/template/injected2.C: New.
|
||||
|
||||
2010-11-17 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
19
gcc/testsuite/g++.dg/cpp0x/defaulted20.C
Normal file
19
gcc/testsuite/g++.dg/cpp0x/defaulted20.C
Normal file
@ -0,0 +1,19 @@
|
||||
// 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" }
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user