Re: comma operator vs. qualification conversions
On Jun 25, 6:49 pm, Matthias Neubauer
<neuba...@abacus.informatik.uni-freiburg.de> wrote:
I am a C++ newbie and I'd like to trace the evaluation of some
expressions of my programs. I tried to use the comma operator for
that, but failed. I used a simple code substitution for expressions to
accomplish that. ... Something like ...
char * s = "foo";
... I transformed into something like ...
extern void trace();
char * s = (trace(), "foo");
... but my compiler (g++ 4.1.2) complained
(error: invalid conversion from 'const char*' to 'char*')!
What's wrong about my code substitution? The standard says (5.18 comma
operator):
"The type and value of the result are the type and value of the
right operand; the result is an lvalue if its right operand is."
Why does qualification conversion (4.4) not apply anymore???
Because this particular qualification conversion is a special
case, and only applies to string literals. "foo" is a string
literal. (trace(), "foo") is not.
In general, when this conversion was adopted, it was deprecated,
and the expressed intent of the committee was that compilers
warn when it occurs, and that it not be used in new code.
Regretfully, compilers have been very slow about generating the
warnings, but there's still no excuse to use it except when
addressing legacy interfaces.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34