<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Jul 26, 2011, at 9:54 PM, Douglas Gregor wrote:</div><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Jul 26, 2011, at 3:34 PM, Eli Friedman wrote:</div><blockquote type="cite"><div>On Tue, Jul 26, 2011 at 3:28 PM, Sean Hunt <<a href="mailto:scshunt@csclub.uwaterloo.ca">scshunt@csclub.uwaterloo.ca</a>> wrote:<br><blockquote type="cite">On Tue, Jul 26, 2011 at 15:25, Eli Friedman <<a href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>> wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite">Author: efriedma<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Date: Tue Jul 26 17:25:31 2011<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">New Revision: 136161<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=136161&view=rev">http://llvm.org/viewvc/llvm-project?rev=136161&view=rev</a><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Log:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">A couple minor issues with Sema for delete:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">1. Attempting to delete an expression of incomplete class type should be an error, not a warning.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">2. If someone tries to delete a pointer to an incomplete class type, make sure we actually emit<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">the delete expression after we warn.<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Deleting an object of incomplete class type is well-formed;<br></blockquote><blockquote type="cite">[expr.delete]/5. This should not be an error.<br></blockquote><br> [expr.delete]/1: "The operand shall have a pointer to object type, or<br>a class type having a single non-explicit conversion function (12.3.2)<br>to a pointer to object type."  An expression of incomplete class type<br>isn't either of those.<br></div></blockquote></div><div><br></div>An incomplete class type is an object type in C++.</div></blockquote><div><br></div>But it's not a pointer to object type.  The "object being deleted" per [expr.delete]p1 is not the operand of the delete function;  if the operand is a pointer, then it's the object pointed to by that pointer, and otherwise it's the object pointed to by the pointer produced by the operand's requisite single non-explicit conversion function.</div><div><br></div><div>Did you check out the actual patch?  DiagnosticSemaKinds.td had err_delete_incomplete_class_type listed as a warning, not an error, and the warning path on deleting pointers to incomplete type was returning ExprError().</div><div><br></div><div>John.</div></body></html>