Author: sebor
Date: Tue Aug 14 15:48:02 2007
New Revision: 565959

URL: http://svn.apache.org/viewvc?view=rev&rev=565959
Log:
2007-08-14  Martin Sebor  <[EMAIL PROTECTED]>

        * EXTERN_C_EXCEPTIONS.cpp: New config test to determine whether
        it's possible to throw exceptions from functions with C language
        linkage.

Added:
    incubator/stdcxx/trunk/etc/config/src/EXTERN_C_EXCEPTIONS.cpp   (with props)

Added: incubator/stdcxx/trunk/etc/config/src/EXTERN_C_EXCEPTIONS.cpp
URL: 
http://svn.apache.org/viewvc/incubator/stdcxx/trunk/etc/config/src/EXTERN_C_EXCEPTIONS.cpp?view=auto&rev=565959
==============================================================================
--- incubator/stdcxx/trunk/etc/config/src/EXTERN_C_EXCEPTIONS.cpp (added)
+++ incubator/stdcxx/trunk/etc/config/src/EXTERN_C_EXCEPTIONS.cpp Tue Aug 14 
15:48:02 2007
@@ -0,0 +1,57 @@
+// checking for exceptions from extern "C" functions
+
+// test tries to determine whether it's possible to throw exceptions
+// from functions with C language linkage
+
+extern "C" {
+
+int extern_c_function (int x, int y, int (*fun)(int, int))
+{
+    if (fun)
+        return fun (x, y);
+
+    return 0;
+
+}
+
+int div_throw (int x, int y)
+{
+    if (0 == y)
+        throw y;
+
+    return x / y;
+}
+
+int div_nothrow (int x, int y)
+{
+    if (0 == y)
+        return 0;
+
+    return x / y;
+
+}
+
+typedef int cfun_t (int, int);
+
+
+}   // extern "C"
+
+
+int main (int argc, char *argv[])
+{
+    const int x = argc < 2 ? 0 : int (*argv [1]);
+    const int y = argc < 3 ? 0 : int (*argv [2]);
+
+    cfun_t* pcfun = argc < 4 ? div_throw : div_nothrow;
+
+    int result;
+
+    try {
+        result = extern_c_function (x, y, pcfun);
+    }
+    catch (int res) {
+        result = res;
+    }
+
+    return result;
+}

Propchange: incubator/stdcxx/trunk/etc/config/src/EXTERN_C_EXCEPTIONS.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/stdcxx/trunk/etc/config/src/EXTERN_C_EXCEPTIONS.cpp
------------------------------------------------------------------------------
    svn:keywords = Id


Reply via email to