// { dg-do assemble } template inline STRUCT * setback(MEMBER *bp, MEMBER STRUCT::*offset) { if(!bp) return 0; union { int i; MEMBER STRUCT::*of; } u; u.of = offset; return (STRUCT *) ((__SIZE_TYPE__) bp - u.i); } struct S { int i; }; int main() { S s; S* sp = setback (&s.i, &S::i); }