I don't know if it's too late, but there is yet another reason
for the use of generalized lvalues besides just ignorance:
using them in macros that verify pointer and struct usage
in a large framework. A comma expression makes it very
convenient, for example (just a general idea):

#ifdef  PRODUCTION
#define X_ABC(x)       ( check( x ), x->abc )
#else
#define X_ABC(x)        x->abc
#endif

which expands

    X_ABC(x) = y;

to:

    ( check( x ), x->abc ) = y;

It is something that is used during development only and
is switched off for the production builds. C++ compatibility
is not an issue either.

Eliminating this construct makes macros much less flexible
and requires much more work for creating self-verifying
frameworks, which is a big issue for small companies with
large codebase. I understand that supporting generalized
lvalues for all possible usage cases (C++, etc.) creates
problems, but why not allowing them for such limited
cases via an obscure special option? GCC always provided
more options that other compilers, it would be sad to see
it changing...

/mike




Reply via email to