public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/60009] New: g++ allows copy-initialization of an array of class type from a non-braced string literal
@ 2014-01-31 14:52 ed at catmur dot co.uk
  2014-06-25  4:21 ` [Bug c++/60009] " rs2740 at gmail dot com
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: ed at catmur dot co.uk @ 2014-01-31 14:52 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60009

            Bug ID: 60009
           Summary: g++ allows copy-initialization of an array of class
                    type from a non-braced string literal
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ed at catmur dot co.uk

The following code should be rejected, but is accepted by g++ 4.8.1, in both
C++03 and C++11 mode:

struct s { s(const char *); } a[] = "";

It is rejected by clang++ and MSVC.  Credit:
http://stackoverflow.com/questions/21481462/what-does-this-code-mean-and-why-does-it-work

List-initialization is correctly allowed in the braced-init-list case
(a[]{""}), and correctly disallowed in the parenthesized case (a[]("")).

Giving the array extent (a[2] = "") does not appear to make any difference.

It looks like the extent of the array is being taken from the length of the
string literal (including terminator), with some amusing results:

#include <string>
#include <iostream>
int main() {
  std::string a[] = "hello";
  for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) std::cout << a[i] << '\n';
}

outputs:

hello
hello
hello
hello
hello
hello

(6, count 'em).

If an array extent is provided (e.g. std::string a[10] = "hello"), then the
string literal will be used to initialize each element.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-10-06 18:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-31 14:52 [Bug c++/60009] New: g++ allows copy-initialization of an array of class type from a non-braced string literal ed at catmur dot co.uk
2014-06-25  4:21 ` [Bug c++/60009] " rs2740 at gmail dot com
2014-12-14 14:16 ` ville.voutilainen at gmail dot com
2021-07-27 21:46 ` pinskia at gcc dot gnu.org
2021-10-06 18:42 ` ppalka at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).