https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120551

            Bug ID: 120551
           Summary: Dynamic char array allocation with string literal in
                    brace initialization fails to use the initialization
                    if size provided is not constexpr
           Product: gcc
           Version: 12.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kirshamir at gmail dot com
  Target Milestone: ---

Dynamic char array allocation with string literal in brace initialization fails
to use the initialization if size provided is not constexpr.

Since gcc 12.1 this code is allowed:
    constexpr size_t size = 2;
    auto test1 = new char[size]{"a"};

As it should be allowed based on
https://timsong-cpp.github.io/cppwp/expr.new#8.4
(The size is valid, thus should be ok).

However, if size is initialized without constexpr, test1 is not initialized
correctly (doesn't copy "a" into the array):

    size_t size = 2;
    auto test1 = new char[size]{"a"};

Code:
gcc 12.1
https://compiler-explorer.com/z/fsv9MxvoT
gcc 15.1
https://compiler-explorer.com/z/x9x789sx1
trunk:
https://compiler-explorer.com/z/q7fe5avn6

Source:
https://stackoverflow.com/questions/79653388/issue-with-aggregate-initialization-with-the-new-operator

Reply via email to