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