My rule of thumb is,
when the return value has an obvious "error mode", such as returning "" for file name (or -1 for collection size), and when the error _must_ be handled by the caller, return a value. If either of those conditions is not met, throw an exception.
--
And what are we doing when the two most powerful nations on earth -- America and Israel -- stomp on the elementary rights of human beings?
-- letter to the editor from W. Ostermeier, Liechtenstein