IIRC, one of boost's smart ptrs can be used with an incomplete type.  How is the compile of the destructor delayed?

ie

~my_smart_ptr()
{
   get()->~T();  // error: T is an incomplete type
}

I wondered through lots of the shared_ptr code, but I got a bit bleary-eyed.  On that note, does anyone have a script or preprocessor call or something that converts all the boost code into the 'clean and ideal boost'?  ie the one without the layers and layers of compiler workarounds, etc?  I think that version would be a much easier read.  And maybe some day all compilers will support that version too.  We can but dream...


Tony