mercredi 15 avril 2015

Should std::current_exception return non-null from catch block in a class's destructor

My coworkers and I think we have found a bug in Visual C++ 2012 and 2013 but we aren't sure. Should the call to std::current_exception in the following code be expected to return a non-null exception_ptr? It seems to on most other compilers we've tried:



#include <exception>
#include <stdexcept>
#include <iostream>

class A
{
public:

~A()
{
try
{
throw std::runtime_error("oh no");
}

catch (std::exception &)
{
std::clog << (bool)std::current_exception() << std::endl;
}
}
};

void foo ()
{
A aa;
throw std::runtime_error("oh no");
}

int main(int argc, char **)
{
try
{
foo();
}
catch(...)
{
}
return 0;
}


When run under Visual C++ we get "0" (false, which means the exception_ptr returned is null). Other compilers, such as g++, print "1".


Aucun commentaire:

Enregistrer un commentaire