Brendon Costa said: > The author of the template class or container can't know > what types of exceptions will be thrown from them, so you must define > them as being able to throw all exceptions (which is how they are > currently). Ouch, you have a point. But couldn't you put this round the other way. Place the onus on the user of the template to comply with the exception guarantees inside the template. Unfortunately that would likely cause problems with some existing code.
I'm trying to think whether this would actually prevent well-designed future code. All I can really come up with so far is copying a vector of vectors and having bad_alloc thrown during a copy constructor partway through, but I think bad_alloc should be allowed. Other things, such as constructing a vector of N thread objects that can throw on failed thread creation, might be better off undergoing a redesign. In other words, would you gain more from a tight exception specification than you'd lose by not being able to do this? Another thought that could be a workaround: Is it possible to do anything like this? =============== template <typename E> int foo() throw(E) {} =============== IE using a template parameter to specify what can be thrown. (Esp with a C++0X variadic). Sorry I won't be near a compiler to test this for many an hour, if I test it and can get it working I'll reply.