Volatile objects are used in multithreaded applications and applications that map hardware devices into registers. Although you can declare an STL container object with the volatile qualifier, you will not be able to use any of its member functions safely. The problem is that none of the STL containers declares any volatile member functions. Yet calling a non-volatile member function on a volatile object is ill-formed. Consider the following example:
volatile vector <int> vi; vi.push_back(1); // trouble; push_back() isn't volatile
Some compilers will compile this code with warnings; others will issue an error message. Either way, the effect of calling a non-volatile member function on a volatile object is unpredictable because the state of the object might be changed by another thread while the function is executing.
Is there a way to get around this? Probably not. By design, STL containers don’t include volatile member functions because of the performance penalty and implementation complexity associated with volatile semantics.