J'utilise le pimpl-idiom 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, j'obtiens une erreur de compilation concernant l'utilisation d'un type incomplet, à la ligne 304 dans <memory>
:
Application invalide de '
sizeof
' à un type incomplet 'uixx::window::window_impl
'
Pour autant que je sache, std::unique_ptr
devrait pouvoir être utilisé avec un type incomplet. S'agit-il d'un bogue dans libc++ ou est-ce que je fais quelque chose de mal ici ?
1 votes
Lien de référence pour les exigences de complétude : stackoverflow.com/a/6089065/576911
1 votes
Un pimpl est souvent construit et non modifié depuis. J'utilise habituellement un std::shared_ptr<const window_impl>
0 votes
Relié : J'aimerais beaucoup savoir pourquoi cela fonctionne dans MSVC, et comment l'empêcher de fonctionner (afin de ne pas casser les compilations de mes collègues de GCC).