aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.cp/m-static.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.cp/m-static.cc')
-rw-r--r--gdb/testsuite/gdb.cp/m-static.cc72
1 files changed, 72 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.cp/m-static.cc b/gdb/testsuite/gdb.cp/m-static.cc
new file mode 100644
index 0000000..6d08cb0
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/m-static.cc
@@ -0,0 +1,72 @@
+// 2002-05-13
+
+enum region { oriental, egyptian, greek, etruscan, roman };
+
+// Test one.
+class gnu_obj_1
+{
+protected:
+ typedef region antiquities;
+ static const bool test = true;
+ static const int key1 = 5;
+ static long key2;
+
+ static antiquities value;
+
+public:
+ gnu_obj_1(antiquities a, long l) {}
+};
+
+const bool gnu_obj_1::test;
+const int gnu_obj_1::key1;
+long gnu_obj_1::key2 = 77;
+gnu_obj_1::antiquities gnu_obj_1::value = oriental;
+
+
+// Test two.
+template<typename T>
+class gnu_obj_2: public virtual gnu_obj_1
+{
+public:
+ static antiquities value_derived;
+
+public:
+ gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7) { }
+};
+
+template<typename T>
+typename gnu_obj_2<T>::antiquities gnu_obj_2<T>::value_derived = etruscan;
+
+// Test three.
+template<typename T>
+class gnu_obj_3
+{
+public:
+ typedef region antiquities;
+ static gnu_obj_2<int> data;
+
+public:
+ gnu_obj_3(antiquities b) { }
+};
+
+template<typename T>
+gnu_obj_2<int> gnu_obj_3<T>::data(etruscan);
+
+// 2002-08-16
+// Test four.
+#include "m-static.h"
+
+// instantiate templates explicitly so their static members will exist
+template class gnu_obj_2<int>;
+template class gnu_obj_2<long>;
+template class gnu_obj_3<long>;
+
+int main()
+{
+ gnu_obj_1 test1(egyptian, 4589);
+ gnu_obj_2<long> test2(roman);
+ gnu_obj_3<long> test3(greek);
+ gnu_obj_4 test4;
+
+ return 0; // breakpoint: constructs-done
+}