(&f())->member, was: union *func()
    Walter Murray 
    walter at hpcllca.HP.COM
       
    Thu Nov  3 02:30:30 AEST 1988
    
    
  
David Lai writs:
> On a related issue, the C language specifies that a function call is never an
> lvalue, yet most compilers I've used allow:
> 	struct xxx f();
> 	dummy = (&f())->member;
> Does anyone know if this is contrary to ANSI?
-- 
Yes, this is contrary to ANSI.  A conforming implementation will have
to diagnose this, as it violates a constraint in Section 3.3.3.2.  A
function call cannot be used as the operand of the unary & operator.
You will find the same restriction in Harbinson & Steele, 2nd ed, p. 139.
"A function call cannot produce an lvalue. ... The operand of a
unary address operator & must be an lvalue."
For that matter, K&R seems to be just as strict.  See p. 187.
Walter Murray
All opinions expressed are my own.
    
    
More information about the Comp.std.c
mailing list