aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-11-16 20:43:10 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-11-16 20:43:10 -0500
commit66753821b5fd89c3fc5711240ecd7a3230586bf2 (patch)
tree3674dee3d513d3cfe61ab481df6b0240514a9218 /gcc
parentbf4c0738c0a3f8984feae12e7ef89f05793a35c9 (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/cp/call.c5
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted20.C19
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" }
+}