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

            Bug ID: 116121
           Summary: GCC rejects valid program involving explicit
                    specialization of static data member without
                    specializing the class template itself
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jlame646 at gmail dot com
  Target Milestone: ---

The following valid program afaik is rejected by gcc and msvc but accepted by
clang: https://godbolt.org/z/PTY1a6cTP

```

#include <iostream>
#include <iomanip>
//wrapper 
template<typename T>
struct Wrapper
{
    inline static T value{};

};

template<> int Wrapper<int>::value = 42;         //clang:OK, gcc:Nope,
MSVC:Nope
template<> double Wrapper<double>::value = 3.14; //clang:OK, gcc:Nope,
MSVC:Nope

int main()
{

}
```
GCC says:

```
<source>:11:30: error: duplicate initialization of 'Wrapper<int>::value'
   11 | template<> int Wrapper<int>::value = 42;
      |                              ^~~~~
<source>:12:36: error: duplicate initialization of 'Wrapper<double>::value'
   12 | template<> double Wrapper<double>::value = 3.14;
      |     
```

Reply via email to