http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49274
--- Comment #14 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-06-03 14:37:17 UTC --- Thanks, Jason. So to respond to the OP, although unique_ptr<T> allows T to be incomplete it might instantiate T, and unlike unique_ptr most templates in the standard library cannot be instantiated with incomplete types, so if T is e.g. std::map<int, incomplete> then the results are undefined.