summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.robertl/eb91.C
blob: abfe9face03292f783b455ac7e64c76cdb6b001b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// { dg-do run  }
#include <sys/types.h>
#include <algorithm>
typedef short _eb91_int16_t;
typedef char _eb91_int8_t;
typedef unsigned char _eb91_u_int8_t;
typedef unsigned short _eb91_u_int16_t;

template <class INT>
class other_endian
{
private:
   
  INT value;

   
  _eb91_u_int16_t change_endian(_eb91_u_int16_t x)
  {
    union {
      _eb91_u_int16_t i;
      _eb91_u_int8_t c[2];
    } val;
    val.i = x;
    std::swap(val.c[0], val.c[1]);
    return val.i;
  }

  _eb91_int16_t change_endian(_eb91_int16_t x)
  {
    union {
      _eb91_int16_t i;
      _eb91_int8_t c[2];
    } val;
    val.i = x;
    std::swap(val.c[0], val.c[1]);
    return val.i;
  }
public:
  other_endian(const INT i = 0)
  {
    value = change_endian(i);
  }

  operator INT()
  {
    return change_endian(value);
  }
};

template <class INT>
class same_endian
{
  INT value;

public:
  same_endian(const INT i = 0)
  {
    value = i;
  }

  operator INT()
  {
    return value;
  }
};

















int main() {
  other_endian <_eb91_u_int16_t> little_endian_16_bit_int;
  return 0;
}