http://stackoverflow.com/questions/6553938/terminate-called-after-throwing-an-instance-of-stdstring
Perhaps some or all modules were compiled with -fno-exceptions
? See http://gcc.gnu.org/onlinedocs/libstdc++/manual/using_exceptions.html for details on how that changes exception behavior.
For example, the following short program displays "terminate called after throwing an instance of 'std::string'"
if:
- the module that contains
foo()
was compiled with-fno-exceptions
, and -
foo()
calls something that throws an exception of typestd::string
(all other modules were compiled with-fexceptions
)#include <string> #include <iostream> using namespace std; int foo(); int main() { try { foo(); } catch (string& s) { std::cout << "caught it: \"" << s << "\"" << endl; } return 0; }
Note that if I simply recompile foo.cpp
with -fexceptions (g++'s default) and relink, the program displays:
caught it: "the string exception"
as expected.
Or perhaps some intermediate function had a throw specification that didn't list std::string
?
For example, this program:
#include <string>
#include <iostream>
using namespace std;
int Hunc() throw(int); // can only throw int (?)
int main()
{
try {
Hunc();
}
catch (string& s) {
std::cout << "caught it: \"" << s << "\"" << endl;
}
return 0;
}
int Hunc() throw(int)
{
throw string("the string exception");
}
Also displays "terminate called after throwing an instance of 'std::string'". Both examples were tested on a Windows box with MinGW 4.5.1.