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

            Bug ID: 125697
           Summary: Spurious -Wrange-loop-construct warning
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: [email protected]
  Target Milestone: ---

The source code producing the warning:
```
template <typename> struct pair {
  int first;
  int second;
  template <typename _U1> pair(const pair<_U1> &&);
};
void reproRangeLoopConstruct(const pair<int> (&arr)[1]) {
  for (const auto x : arr)
    ;
}
static_assert(__is_trivially_copyable(pair<int>));
static_assert(sizeof(pair<int>) == 8);
```


The GCC version used:
```
Using built-in specs.
COLLECT_GCC=./gcc/xg++
Target: x86_64-pc-linux-gnu
Configured with: ../configure
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 17.0.0 20260609 (experimental) (GCC)
```


The output:
```
repro.cc: In function ‘void reproRangeLoopConstruct(const pair<int> (&)[1])’:
repro.cc:7:19: warning: loop variable ‘x’ creates a copy from type ‘const
pair<int>’ [-Wrange-loop-construct]
    7 |   for (const auto x : arr)
      |                   ^
repro.cc:7:19: note: use reference type to prevent copying
    7 |   for (const auto x : arr)
      |                   ^
      |                   &
```

Reply via email to