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

            Bug ID: 117817
           Summary: Compile error when taking address of temporary array
                    in sizeof operator
           Product: gcc
           Version: 13.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: odion at efficios dot com
  Target Milestone: ---

The following program compiles fine with all versions of GCC except for version
13.

a-bug.ii:
  # 0 "bug.cpp"
  # 0 "<built-in>"
  # 0 "<command-line>"
  # 1 "/usr/include/stdc-predef.h" 1 3
  # 0 "<command-line>" 2
  # 1 "bug.cpp"
  constexpr int c = 1;
  struct e {
    int *b;
  };
  struct {
    long d;
  } a{sizeof e{(int[]){c}}};
  int main() {}

error:
  bug.cpp:7:21: error: taking address of temporary array
      7 | } a{sizeof e{(int[]){c}}};
        |         

command:
  g++ a-bug.ii

Toolchain:
  Target: x86_64-unknown-linux-gnu
  Configured with: 
  Thread model: posix
  Supported LTO compression algorithms: zlib
  gcc version 13.3.0 (GCC)

System:
  Guix System
--

What I find weird is that an error is reported for taking the address of a
temporary array in a sizeof() operator.

What is even weirder is that if you change the expression `constexpr int c =
1;'
to `#define c 1', then there is no error.  However, changing it to `enum { c
};'
does trigger the same error.

Reply via email to