| // PR c++/7046 |
| |
| extern "C" int printf (const char *, ...); |
| |
| #pragma pack(4) |
| |
| template <typename X > |
| struct T |
| { |
| char x1; /* Usually 3 padding bytes are added after x1 member. */ |
| int x2; |
| }; |
| |
| template <class T> |
| int f() |
| { |
| struct A { char i1; int i2; }; |
| return sizeof (A); |
| } |
| |
| #pragma pack(1) |
| template struct T<int>; /* T<int> is instantiated here */ |
| template int f<int>(); |
| |
| #pragma pack(4) |
| template struct T<float>; /* T<float> is required here */ |
| template int f<double>(); |
| |
| int main() |
| { |
| printf("sizeof T<int> = %d\n", sizeof(T<int>)); |
| printf("sizeof T<float> = %d\n", sizeof(T<float>)); |
| printf("f<int>() = %d\n", f<int>()); |
| printf("f<float>() = %d\n", f<float>()); |
| return (sizeof(T<int>) != sizeof(T<float>) |
| || f<int>() != f<float>()); |
| } |