re PR c++/49102 ([C++0x] Use of deleted copy constructor not diagnosed)
PR c++/49102 * call.c (convert_arg_to_ellipsis): Call force_rvalue. From-SVN: r174101
This commit is contained in:
parent
a345e45d14
commit
874aeeede5
@ -1,5 +1,8 @@
|
||||
2011-05-23 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/49102
|
||||
* call.c (convert_arg_to_ellipsis): Call force_rvalue.
|
||||
|
||||
PR c++/49105
|
||||
* typeck.c (cp_build_c_cast): Don't strip cv-quals when
|
||||
converting to reference.
|
||||
|
@ -5905,10 +5905,13 @@ convert_arg_to_ellipsis (tree arg)
|
||||
/* In a template (or ill-formed code), we can have an incomplete type
|
||||
even after require_complete_type, in which case we don't know
|
||||
whether it has trivial copy or not. */
|
||||
&& COMPLETE_TYPE_P (arg_type)
|
||||
&& (type_has_nontrivial_copy_init (arg_type)
|
||||
|| TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
|
||||
&& COMPLETE_TYPE_P (arg_type))
|
||||
{
|
||||
/* Build up a real lvalue-to-rvalue conversion in case the
|
||||
copy constructor is trivial but not callable. */
|
||||
if (CLASS_TYPE_P (arg_type))
|
||||
force_rvalue (arg, tf_warning_or_error);
|
||||
|
||||
/* [expr.call] 5.2.2/7:
|
||||
Passing a potentially-evaluated argument of class type (Clause 9)
|
||||
with a non-trivial copy constructor or a non-trivial destructor
|
||||
@ -5920,7 +5923,9 @@ convert_arg_to_ellipsis (tree arg)
|
||||
|
||||
If the call appears in the context of a sizeof expression,
|
||||
it is not potentially-evaluated. */
|
||||
if (cp_unevaluated_operand == 0)
|
||||
if (cp_unevaluated_operand == 0
|
||||
&& (type_has_nontrivial_copy_init (arg_type)
|
||||
|| TYPE_HAS_NONTRIVIAL_DESTRUCTOR (arg_type)))
|
||||
error ("cannot pass objects of non-trivially-copyable "
|
||||
"type %q#T through %<...%>", arg_type);
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
2011-05-23 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/cpp0x/defaulted28.C: New.
|
||||
|
||||
* g++.dg/cpp0x/sfinae25.C: New.
|
||||
|
||||
* g++.dg/cpp0x/rv-cast2.C: New.
|
||||
|
15
gcc/testsuite/g++.dg/cpp0x/defaulted28.C
Normal file
15
gcc/testsuite/g++.dg/cpp0x/defaulted28.C
Normal file
@ -0,0 +1,15 @@
|
||||
// PR c++/49102
|
||||
// { dg-options -std=c++0x }
|
||||
|
||||
struct A {
|
||||
A() = default;
|
||||
|
||||
private:
|
||||
A(A const&) = default; // { dg-error "private" }
|
||||
};
|
||||
|
||||
void f(...) { }
|
||||
int main() {
|
||||
A a;
|
||||
f(a); // { dg-error "this context" }
|
||||
}
|
Loading…
Reference in New Issue
Block a user