I find shared_memory_object constructor semantics to be rather inconvenient for embedding it into another class. Consider the following class A { public: A(int type) : shm_(pass params to the shared_memory_object ctor) { } private: shared_memory_object shm_; }; If my class A is such that a shared_memory_object needs to be called with either create_only or open_only based on the type passed to A's constructor, I can't do it easily. i.e. some thing like A(int type) : shm_(type == something ? create_only : open_only) {} This won't work because create_only & open_only are different types & this will call 2 different overloaded constructors, hence the above code will not compile. Alternatives here are 1) make A a templated class instead of having type as a ctor param. i.e. template <class T> class A { public: A() : shm_(T(), other params) {} }; then use A<create_only> a; A<open_only> b; OR 2) Keep a shared_memory_object ptr inside non-templated class A instead of an actual object and create it dynamically. Assuming, I don't want to use either of these options, is there any other nifty trick anyone can think of to achieve what I want to do?