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

            Bug ID: 119824
           Summary: initialization of a static member variable with type
                    auto or decltype(auto) is not accepted
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: heiko at hexco dot de
  Target Milestone: ---

I experimented with forms of initialization for static member variables and
found different results with different compilers.
Now I am not sure if my code is really valid C++17...

I compiled this with GCC trunk with -Wall -Wextra -O2 --std=c++17

========================
struct z {
  static unsigned a;
  static unsigned b;
  static inline auto c{3U};
  static const auto d{4U};
};
decltype(auto) z::a{1U};
auto z::b{2U};

int main() { return 0; }
========================

EDG, ICX and Clang accept it, while MSVC and GCC don't, claiming type
conflicts.

Output:
<source>:7:16: error: conflicting declaration 'decltype(auto) z::a'
    7 | decltype(auto) z::a{1U};
      |                ^
<source>:2:19: note: previous declaration as 'unsigned int z::a'
    2 |   static unsigned a;
      |                   ^
<source>:8:6: error: conflicting declaration 'auto z::b'
    8 | auto z::b{2U};
      |      ^
<source>:3:19: note: previous declaration as 'unsigned int z::b'
    3 |   static unsigned b;
      |                   ^
Compiler returned: 1

For a comparison see also https://godbolt.org/z/7f89xbzPa

Thanks!

Reply via email to