title: Purpose of boost::checked_delete
body: <p>I don't understand the purpose of boost::checked_delete.  The documentation says:</p>
  
  <blockquote>
    <p>The C++ Standard allows, in 5.3.5/5,
    pointers to incomplete class types to
    be deleted with a delete-expression.
    When the class has a non-trivial
    destructor, or a class-specific
    operator delete, the behavior is
    undefined. Some compilers issue a
    warning when an incomplete type is
    deleted, but unfortunately, not all
    do, and programmers sometimes ignore
    or disable warnings.</p>
    
    <p>The supplied function and class
    templates can be used to prevent these
    problems, as they require a complete
    type, and cause a compilation error
    otherwise.</p>
  </blockquote>
  
  <p>So the C++ standard allows you to delete incomplete types, which causes undefined behavior if the type has a non-trivial destructor.  What?  How can an incomplete type have any destructor at all?  Isn't an incomplete type just a prototype?</p>