<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/102927>102927</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Clang rejects valid out of class definition of static data member of nested class template
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ranaanoop
      </td>
    </tr>
</table>

<pre>
    While answering [this question](https://stackoverflow.com/q/78862577/12002570) I noticed that clang rejects the following program while gcc and msvc correctly accept it. [Demo](https://godbolt.org/z/MbfK6zvrE)

```

#include <iostream>
template <class T>
class Outer
{
public:
  enum InnerType {foo, bar /* etc */};
  
  template <InnerType U>
  class Inner
  {
  public:
    static int x;
  };

public:
 
  void print() { std::cout << Inner<foo>::x << std::endl; }
};

template<class T> template<enum Outer<T>::InnerType I>  int Outer<T>::template Inner<I>::x =0;
int main()
{
    Outer<int> i;
    i.print();
}
```
Clang says:

```
<source>:21:90: error: nested name specifier 'Outer<T>::template template Inner<I>::' for declaration does not refer into a class, class template or class template partial specialization
   21 | template<class T> template<enum Outer<T>::InnerType I>  int Outer<T>::template Inner<I>::x =0;
      | 
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMlc1u4zgMx59GuRAT2JJdJQcf8tEAxWKxly72TMt0ol1Z8khyOu3TL2QnbpIp5jxFEduiSf34J01hCPpoiSpWblm5X-AQT85XHi2ida5f1K55r_45aUOANryR1_YIrNzGkw7wfaAQtbOs3DO-OsXYByY2jB8YP4SI6j93Jt8a97ZUrmP88J3xg1ytnngpJeOHnGcZL2XG-BpewLqoFTUQTxhBGbRH8PQvqRggnghaZ4x7S7v33h09dvA2Uh2VArQNdOGsQDnvSUXzDqgU9RF0XCbaPXXuK8ija2pn4tL5I-OHD8YPf9btH08fZ__M-Jple5ZtLr9P2eX_dpELbZUZGgImdtqF6Ak7Jp4nc6SuNxhHozIYArzOtun5ryGSv8SS2-mmH2qjVUIcHwHIDh28WEv-9b0nYHLbOsf4Dmr0MOaxAYoKGB-zknsmtlff6_UW5TPU3zMOwAQ02mZnOcf5CQogRIxagbYRftzueLP_1wld3zw73UDvtY2Mr1IPMLmFEJv0ptgoN8REy8TuQiV2KW_xPNl_XI2zB9nGMLEdCS6SPqJcZbgrCNysjlpPVRG713mzT8leksOY9M9vzSJfeV_uaPfZTJP8O9R2SvyhAZK41-BJHPEM-kZgAL28Ue0zwznt-1bdjZ9SwPcwl-Drlha74AavaILmORObdcbEBsh759ONpRCpAYsdQehJ6VZTakH5Cy1-IQrjElrnoSFl0GOaJNA4CmkUgKeWfBLaAU7NmVp-qtoc0_nHlR591GgmPDT6Yww7a8dzYHIHv0sfwPiXiB5Ksmgq0azFGhdU5ZKLQq5LLhenCouC6qKus6ZtsSRRIM9kWWPJ15RnWbvQFc94ka1ynj_lq0IuszwnqRSpFldNVhasyKhDbZbGnLs0-RY6hIGqPONrLhcGazJhPA84H8cw4zwdDb5KDt_q4RhYkRkdYvgMEXU0VO3upvYZjW4gfcauvZSpoVZbPRbatdcJ0mBE6KiryafVS5Pd13UxeFM9zG4dT0N9OVkSyOXyrfcuATB-GBML6aSZcjtX_P8AAAD__8hJEIM">