It simply means that you did not actually catch all exceptions. This is how you could do it:
try{
} catch (...) {
}
This approach is
often criticized, for some good reasons. Unlike systems where all exceptions are always derived from one single exception type (so it can be used to catch all possible exception and to still have an exception object), in C++ this is not the case: you can through absolutely any object, including a primitive-type one. When you catch some unknown exception, you won't know what to do with it.
So, you can use this construct in two cases: 1) if you want to block propagation of all exception, which is a pretty bad trick, which can be unavoidable in some "bad" situations, for example, to compensate some defects in bad APIs which are not accessible for patching for your; 2) for pure debugging/research purposes.
The second option can help you well. You can put a break point of the catch block shown above, create some exceptional situation, such as integer division by zero, and see what type is caught. Then you can add additional catch blocks designed to catch some particular types of exception object.
Remember some of the main principles of exception handling: reduce catching to minimum, don't try-catch locally, let go, handle exceptions in the points of the stack where the code is competent to handle it (I call it "points of competence"), at the same time, always handle all exception somewhere on the top stack frame of the stack of each thread.
—SA