leach@tolerant.com (Geoffrey Leach) (12/28/89)
/* ** These three typedefs are taken from the X11R3 Xt Intrinsics ** header files. */ typedef enum { XtGeometryYes } XtGeometryResult; typedef XtGeometryResult (*XtGeometryHandler)(); typedef struct _CompositeClassPart { XtGeometryHandler geometry_manager; } CompositeClassPart; /* ** Here's the problem code */ extern XtGeometryHandler foo(); CompositeClassPart ccp = { foo }; /* ** And the result from the SVR3.2.2 cc is the warning: ** ** "p.c", line 22: warning: illegal pointer combination, op = ** ** The key to the complaint appears to be the fact that the ** typedef is a pointer to a procedure returning an enum. ** Is this a peculiarity of ATT's cc? Anyone know of a workaround? */
walter@hpclwjm.HP.COM (Walter Murray) (12/29/89)
Geoffrey Leach writes: [abridged to conserve bandwidth] > typedef enum { XtGeometryYes } XtGeometryResult; > typedef XtGeometryResult (*XtGeometryHandler)(); > typedef struct _CompositeClassPart { > XtGeometryHandler geometry_manager; > } CompositeClassPart; > extern XtGeometryHandler foo(); > CompositeClassPart ccp = { foo }; > /* > ** And the result from the SVR3.2.2 cc is the warning: > ** warning: illegal pointer combination, op = > ** The key to the complaint appears to be the fact that the > ** typedef is a pointer to a procedure returning an enum. > ** Is this a peculiarity of ATT's cc? Anyone know of a workaround? > */ ---------- No, the compiler is correct. The code is illegal. Some compilers won't complain; some will. Any ANSI-conforming compiler should complain. My guess is that you didn't declare foo() the way you meant to. Perhaps you meant: extern XtGeometryResult foo(); Warning: I know nothing about the Xt intrinsics. This is just a guess. Walter Murray ---