|
|
|
@ -1,73 +1,68 @@ |
|
|
|
// 2002-05-13
|
|
|
|
|
|
|
|
namespace __gnu_test |
|
|
|
{ |
|
|
|
enum region { oriental, egyptian, greek, etruscan, roman }; |
|
|
|
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; |
|
|
|
// 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; |
|
|
|
static antiquities value; |
|
|
|
|
|
|
|
public: |
|
|
|
gnu_obj_1(antiquities a, long l) {} |
|
|
|
}; |
|
|
|
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; |
|
|
|
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; |
|
|
|
// 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) { } |
|
|
|
}; |
|
|
|
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; |
|
|
|
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; |
|
|
|
// 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) { } |
|
|
|
}; |
|
|
|
public: |
|
|
|
gnu_obj_3(antiquities b) { } |
|
|
|
}; |
|
|
|
|
|
|
|
template<typename T> |
|
|
|
gnu_obj_2<int> gnu_obj_3<T>::data(etruscan); |
|
|
|
template<typename T> |
|
|
|
gnu_obj_2<int> gnu_obj_3<T>::data(etruscan); |
|
|
|
|
|
|
|
// 2002-08-16
|
|
|
|
// Test four.
|
|
|
|
// 2002-08-16
|
|
|
|
// Test four.
|
|
|
|
#include "m-static.h" |
|
|
|
} |
|
|
|
|
|
|
|
// instantiate templates explicitly so their static members will exist
|
|
|
|
template class __gnu_test::gnu_obj_2<int>; |
|
|
|
template class __gnu_test::gnu_obj_2<long>; |
|
|
|
template class __gnu_test::gnu_obj_3<long>; |
|
|
|
template class gnu_obj_2<int>; |
|
|
|
template class gnu_obj_2<long>; |
|
|
|
template class gnu_obj_3<long>; |
|
|
|
|
|
|
|
int main() |
|
|
|
{ |
|
|
|
using namespace __gnu_test; |
|
|
|
|
|
|
|
gnu_obj_1 test1(egyptian, 4589); |
|
|
|
gnu_obj_2<long> test2(roman); |
|
|
|
gnu_obj_3<long> test3(greek); |
|
|
|
|