#include class movable { public: movable(){} movable(const movable&) = delete; movable(movable&&) { } const movable& operator=(const movable&) = delete; const movable& operator=(movable&&) = delete; }; typedef movable moteur; typedef movable roues; typedef movable portes; typedef movable volant; moteur fabrique_moteur() { return moteur(); } roues fabrique_roues() { return roues(); } portes fabrique_portes() { return portes(); } volant fabrique_volant() { return volant(); } class voiture { public: voiture ( moteur&& un_moteur, roues&& des_roues, portes&& des_portes, volant&& un_volant ): moteur_(std::move(un_moteur)), roues_(std::move(des_roues)), portes_(std::move(des_portes)), volant_(std::move(un_volant)) { } private: moteur moteur_; roues roues_; portes portes_; volant volant_; }; int main() { moteur m = fabrique_moteur(); roues r = fabrique_roues(); portes p = fabrique_portes(); volant v = fabrique_volant(); voiture notre_voiture(m, r, p, v); return 0; }