summaryrefslogtreecommitdiff
path: root/glib/glibmm/error.cc
diff options
context:
space:
mode:
Diffstat (limited to 'glib/glibmm/error.cc')
-rw-r--r--glib/glibmm/error.cc15
1 files changed, 13 insertions, 2 deletions
diff --git a/glib/glibmm/error.cc b/glib/glibmm/error.cc
index 2e8f0723..fea6d660 100644
--- a/glib/glibmm/error.cc
+++ b/glib/glibmm/error.cc
@@ -30,7 +30,6 @@
GLIBMM_USING_STD(map)
-
namespace
{
@@ -131,7 +130,6 @@ void Error::propagate(GError** dest)
gobject_ = 0;
}
-
// static
void Error::register_init()
{
@@ -160,8 +158,12 @@ void Error::register_domain(GQuark domain, Error::ThrowFunc throw_func)
(*throw_func_table)[domain] = throw_func;
}
+#ifdef GLIBMM_EXCEPTIONS_ENABLED
// static, noreturn
void Error::throw_exception(GError* gobject)
+#else
+std::auto_ptr<Glib::Error> Error::throw_exception(GError* gobject)
+#endif //GLIBMM_EXCEPTIONS_ENABLED
{
g_assert(gobject != 0);
@@ -171,7 +173,11 @@ void Error::throw_exception(GError* gobject)
if(const ThrowFunc throw_func = (*throw_func_table)[gobject->domain])
{
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
(*throw_func)(gobject);
+ #else
+ return (*throw_func)(gobject);
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
g_assert_not_reached();
}
@@ -179,9 +185,14 @@ void Error::throw_exception(GError* gobject)
"unknown error domain '%s': throwing generic Glib::Error exception\n",
(gobject->domain) ? g_quark_to_string(gobject->domain) : "(null)");
+#ifdef GLIBMM_EXCEPTIONS_ENABLED
// Doesn't copy, because error-returning functions return a newly allocated GError for us.
throw Glib::Error(gobject);
+#else
+ return std::auto_ptr<Glib::Error>(new Glib::Error(gobject));
+#endif //GLIBMM_EXCEPTIONS_ENABLED
}
+
} // namespace Glib