 <p>You're defining the same function signature many times. The different <code>throw()</code> qualifiers are not enough to disambiguate the functions.</p> <p>The <code>throw()</code> qualifier simply means that the specified function is only expected to throw the types listed in the parenthesis following the qualifier. However, this does not actually prevent the function from throwing. Rather, if the function actually <em>does</em> throw any unlisted types, your program will terminate. </p>