Topic: Defect Report: "string-literal" used where narrow string literal is possibly intended


Author: gennaro_prota@yahoo.com (Gennaro Prota)
Date: Tue, 12 Sep 2006 23:35:24 GMT
Raw View
There are several places in the standard where a string-literal is
said to be required but it is at best dubious whether a wide string
literal is actually allowed:

* 7 [dcl.dcl]/1 and 7 [dcl.dcl]/4: respectively grammar and
description for static_assert-declaration

* 7.4 [dcl.asm]/1: the asm declaration

* 7.5 [dcl.link]/1: linkage specifications

* 8.5.2 [dcl.init.string]/1:

    "A char array (whether plain char, signed char, or unsigned char)
     can be initialized by a string-literal (optionally enclosed in
     braces)"

  This should clearly be "A char array (whether plain char, signed
  char, or unsigned char) can be initialized by a narrow
  string-literal"

* 16.3.2 [cpp.stringize]/2:

    "If, in the replacement list, a parameter is immediately preceded
     by a # preprocessing token, both are replaced by a single
     character string literal preprocessing token that contains the
     spelling of the preprocessing token sequence for the
     corresponding argument."

  16.4 [cpp.line]/1:

    "The string literal of a #line directive, if present, shall be a
     character string literal."

  This seems a terminology problem: does "character string literal"
  stand for "narrow string literal"? Also, I can see an almost
  random switching between the forms "string-literal", which a
  hyphen, and "string literal". Maybe some editorial fix is in
  order.

  16.8 [cpp.predefined]/1:

    "__FILE__
     The presumed name of the source file (a character string
     literal).

  These three preprocessing cases should IMHO all be clarified.

--
Gennaro Prota

---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html                      ]





Author: fgothamNO@SPAM.com (Frederick Gotham)
Date: Wed, 13 Sep 2006 02:45:11 GMT
Raw View
Gennaro Prota posted:

> There are several places in the standard where a string-literal is
> said to be required but it is at best dubious whether a wide string
> literal is actually allowed:


Perhaps it would be more convenient to write:

    Unless explicitly described as a wide string literal, any mention of a
string literal in this International Standard refers to a narrow string
literal.

--

Frederick Gotham

---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html                      ]





Author: "Greg Herlihy" <greghe@pacbell.net>
Date: Wed, 13 Sep 2006 07:39:48 CST
Raw View
Frederick Gotham wrote:
> Gennaro Prota posted:
>
> > There are several places in the standard where a string-literal is
> > said to be required but it is at best dubious whether a wide string
> > literal is actually allowed:
>
>
> Perhaps it would be more convenient to write:
>
>     Unless explicitly described as a wide string literal, any mention of a
> string literal in this International Standard refers to a narrow string
> literal.

Narrow string literals are also called "ordinary" string literals -
which means that the plain term "string literal" can be taken to mean a
narrow string literal.

Now the term "string-literal" (note the hyphen) is a specific
production of the C++ grammar (which is why the term is italicized).
Furthermore, the "string-literal" production encompasses both narrow
and wide string literals. So it is not the case that the Standard is
randomly varying the spelling of "string literal" because it is unsure
which variation is correct. On the contrary, the two terms are distinct
- one is a generic term for a program's constant character data and the
other is a specific production of the C++ language.

Greg

---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html                      ]





Author: gennaro_prota@yahoo.com (Gennaro Prota)
Date: Wed, 13 Sep 2006 12:39:58 GMT
Raw View
On Wed, 13 Sep 2006 02:45:11 GMT, fgothamNO@SPAM.com (Frederick
Gotham) wrote:

>Gennaro Prota posted:
>
>> There are several places in the standard where a string-literal is
>> said to be required but it is at best dubious whether a wide string
>> literal is actually allowed:
>
>
>Perhaps it would be more convenient to write:
>
>    Unless explicitly described as a wide string literal, any mention of a
>string literal in this International Standard refers to a narrow string
>literal.

Hmm... in general I don't like these sorts of sentences: they are
almost always too far from any point they refer to, for little benefit
(the standard, just like source code, is read a considerable higher
number of times than it is written :-O).

<meta (to mods)>

    A while ago defect report posts which were accepted by the
    moderator carried a note along the lines of "forwarded to
    the C++ committee". I notice this is no more the case. Are
    they silently forwarded? (Last time this happened I verified
    that it had *not* been forwarded)

</meta>

--
Gennaro Prota

---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html                      ]