<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">