Re: Terminate called after throwing an instance of...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Well, it looks like we should yank exception specifications.

On Mon, Sep 5, 2011 at 3:54 AM, Jonathan Wakely <jwakely.gcc@xxxxxxxxx> wrote:
> On 5 September 2011 05:13, Jeffrey Walton <noloader@xxxxxxxxx> wrote:
>> On Sun, Sep 4, 2011 at 6:50 PM, Jeffrey Walton <noloader@xxxxxxxxx> wrote:
>>> Hi All,
>>>
>>> I'm seeing the following on a negative test case:
>>>
>>>    terminate called after throwing an instance of
>>>    'esapi::NoSuchAlgorithmException'
>>>      what():  Algorithm 'Foo' is not supported
>>>
>>> Any ideas on what might cause the exception to pass uncaught? I am
>>> familiar with http://gcc.gnu.org/faq.html#dso.
>>>
>>> [SNIP]
>>
>> Found it.... MessageDigest md1("Foo") uses 'createInstance(...)' in a
>> PIMPL. However, createInstance(...) [incorrectly] declared it throws a
>> "InvalidArgumentException". In reality, the function throws a
>> "NoSuchAlgorithmException".
>>
>> Visual Studio ran fine because MSVC ignores the exception
>> specification (http://msdn.microsoft.com/en-us/library/wfa0edys%28v=VS.90%29.aspx).
>>
>> I'm running with -Wall, -Wextra, which did not help me. Would anyone
>> know the warning I am looking for? I did not see it at
>> http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html.
>
> There's no such warning, C++ exception specifications are not
> statically checked, ever.   C++ is not Java.
>
> The only good exception specification is throw() (renamed noexcept in
> C++11), best practice is not to use non-empty exception specs.  Pretty
> much the only effect non-empty specs have is to cause unwanted
> terminations, as you've discovered, and they're deprecated in C++11.
> If you want to document what exceptions can be thrown, use a comment.
> If it's wrong you won't terminate immediately.
>
> http://www.gotw.ca/publications/mill22.htm
>



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux