build: check if anonymous structs and unions are permitted in configure
authorRamprasad Venkataraman <ramv@illinois.edu>
Mon, 16 Jul 2012 16:17:20 +0000 (11:17 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Mon, 16 Jul 2012 16:17:20 +0000 (11:17 -0500)
src/scripts/configure
src/scripts/configure.in
src/scripts/conv-autoconfig.h.in

index 9c1bbdf3cea70437e9a83ea9bea153ca1e0ca3a8..1aac5f2e556a21f1f4f7999df9dd91d927c3ab3a 100755 (executable)
@@ -2791,6 +2791,42 @@ _ACEOF
 
 
 
+#### check if anon structs are permitted #####
+cat > $t <<EOT
+#include <iostream>
+using std::cout;
+
+struct idx
+{
+    const static int dims = 3;
+    union
+    {
+        int data[dims];
+        struct { int x, y, z; };
+    };
+
+    idx(const int i=0, const int j=0, const int k=0): x(i), y(j), z(k) {}
+};
+
+int main()
+{
+    cout<<"Hello World!\n";
+    idx myidx(1, 2, 3);
+    cout<< "idx = ("
+        << myidx.data[0] << ","
+        << myidx.data[1] << ","
+        << myidx.z << ")\n";
+    return (myidx.data[0] = 1 && myidx.y == 2 && myidx.data[2] == 3);
+}
+EOT
+test_cxx "whether anon structs are permitted" "yes" "no" ""
+
+cat >>confdefs.h <<_ACEOF
+#define CMK_HAS_ANON_STRUCTS $pass
+_ACEOF
+
+
+
 #### test if we can have multiple delete like this ####
 cat > $t <<EOT
 class foo {
index 37361ee772d2adb84a09a0c553d97e9167625897..1fba5735771b262ad2c3eef12eab8021d74c3ffd 100644 (file)
@@ -861,6 +861,38 @@ test_cxx "whether std::unordered_map is defined" "ok" "no" ""
 AC_DEFINE_UNQUOTED(CMK_HAS_STD_UNORDERED_MAP, $pass, [whether std::unordered_map works])
 
 
+#### check if anon structs are permitted #####
+cat > $t <<EOT
+#include <iostream>
+using std::cout;
+
+struct idx
+{
+    const static int dims = 3;
+    union
+    {
+        int data[[dims]];
+        struct { int x, y, z; };
+    };
+
+    idx(const int i=0, const int j=0, const int k=0): x(i), y(j), z(k) {}
+};
+
+int main()
+{
+    cout<<"Hello World!\n";
+    idx myidx(1, 2, 3);
+    cout<< "idx = ("
+        << myidx.data[[0]] << ","
+        << myidx.data[[1]] << ","
+        << myidx.z << ")\n";
+    return (myidx.data[[0]] = 1 && myidx.y == 2 && myidx.data[[2]] == 3);
+}
+EOT
+test_cxx "whether anon structs are permitted" "yes" "no" ""
+AC_DEFINE_UNQUOTED(CMK_HAS_ANON_STRUCTS, $pass, [whether anon structs are permitted])
+
+
 #### test if we can have multiple delete like this ####
 cat > $t <<EOT
 class foo {
index 540e5f0401a17468569049b1d4497af515e8da18..635e8a167b4aab794c314d01a47f11d42514a255 100644 (file)
 /* whether std::unordered_map works */
 #undef CMK_HAS_STD_UNORDERED_MAP
 
+/* whether anon structs are permitted */
+#undef CMK_HAS_ANON_STRUCTS
+
 /* whether has strings.h */
 #undef CMK_HAS_STRINGS_H