std::unique_ptr incomplète, ce type ne compile pas

Je suis en utilisant le pimpl-idiome avec std::unique_ptr:

class window {
  window(const rectangle& rect);

private:
  class window_impl; //defined elsewhere
  std::unique_ptr<window_impl> impl_; //won't compile
};

Cependant, je reçois une erreur de compilation concernant l'utilisation d'un type incomplète, sur la ligne 304 en <memory>:

Invalide application de la sizeof " à un type incomplète 'uixx::window::window_impl'

Pour autant que je sache, std::unique_ptr devrait pouvoir être utilisé avec un type incomplète. Est-ce un bug de la libc++ ou suis-je en train de faire quelque chose de mal ici?

Post code complet s'il vous plaît. En particulier le modèle des constructeurs.
Le coup de pouce de pointeur intelligent bibliothèque interdire boost::unique_ptr de travailler avec incomplètes types: vous avez eu à utiliser boost::shared_ptr à la place. Êtes-vous sûr que le C++ de la bibliothèque standard n'ont pas la même restriction?
le code de l'OP posté est code complet pour ce cas d'utilisation. Un fichier composé uniquement de #include <memory> et ces deux lignes devraient compiler... en supposant unique_ptr est autorisé à être utilisé avec incomplètes types.
si ces deux lignes étaient à portée de classe, ce serait OK, à condition que le destructeur est définie par une window_impl est terminée. C'est pourquoi je vous demande. Ici, bien sûr, cela ne fonctionne pas car à ce stade, le destructeur de window_impl n'est pas connue.
C. j'ai fait clair maintenant que les deux lignes sont dans une définition de classe.

OriginalL'auteur | 2012-03-31