Any object that defines the copy constructor, default constructor, assignment operator and destructor as public members (either explicitly or implicitly) can be stored in STL containers. If you do not declare any of these, the compiler will automatically define the missing member functions as public. So, if you wish to disqualify a class from STL containment, you should explicitly declare at least one of these members as protected or private.