I always wondered whether there's any reason why exception specifications are enforced at runtime, rather than at compile-time like in Java? (This was prompted by reading an article on GOTW, but lost the link and I am not sure about that as well) Is there something about C++ that makes it harder/impossible to check at compile-time or is there anything specific advantage of making it at compile time in Java?