diff options
author | Jason Merrill <jason@redhat.com> | 2010-11-16 20:43:10 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-11-16 20:43:10 -0500 |
commit | 66753821b5fd89c3fc5711240ecd7a3230586bf2 (patch) | |
tree | 3674dee3d513d3cfe61ab481df6b0240514a9218 /gcc | |
parent | bf4c0738c0a3f8984feae12e7ef89f05793a35c9 (diff) | |
download | gcc-66753821b5fd89c3fc5711240ecd7a3230586bf2.zip gcc-66753821b5fd89c3fc5711240ecd7a3230586bf2.tar.gz gcc-66753821b5fd89c3fc5711240ecd7a3230586bf2.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/call.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/defaulted20.C | 19 |
4 files changed, 27 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e32c3b7..d651ba8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index eb7247d..7fa1cf6 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -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)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e40c1e9..76540df 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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> diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted20.C b/gcc/testsuite/g++.dg/cpp0x/defaulted20.C new file mode 100644 index 0000000..d9ad04f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted20.C @@ -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" } +} |