1// { dg-do assemble  }
2
3template <class STRUCT, class MEMBER> inline STRUCT *
4setback(MEMBER *bp, MEMBER STRUCT::*offset)
5{
6        if(!bp) return 0;
7        union { int i; MEMBER STRUCT::*of; } u;
8        u.of = offset;
9        return (STRUCT *) ((__SIZE_TYPE__) bp - u.i);
10}
11
12
13struct S
14{
15  int i;
16};
17
18int main()
19{
20  S s;
21
22  S* sp = setback (&s.i, &S::i);
23}
24