Originally Posted by
brewbuck
There are some situations where that's probably ok, without seeing your code I can't really tell. Boost::Spirit uses exceptions to implement backtracking, which on the one hand is very elegant at the code level, but on the other hand you really have no idea how exceptions are implemented by the compiler and runtime, and throwing an exception could be very lightweight on one platform and a HUGE expense on another.
Once you've taken that plunge and coded your entire design around exceptions it would be a huge effort to go back on that decision, perhaps to the level of a complete rewrite.
My philosophy is that an exception should only be thrown when something has gone wrong in a way that should not normally happen (and that doesn't include "every type of error" since some errors are expected to happen during normal use), and that try-catch blocks should only be used in those locations where the exception is dealt with, never for resource management (you can boil this rule down to "never re-throw"). There are very rare situations where you need to do something weird, and of course, everyone is free to do what they want.