| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s | 
 | // expected-no-diagnostics | 
 |  | 
 | namespace GH61159 { | 
 | template <typename T> struct X { | 
 |   struct I; | 
 | }; | 
 |  | 
 | template <> struct X<int>::I { | 
 |   template <int ct> constexpr int f() { return ct; }; | 
 |  | 
 |   int data = 3; | 
 | }; | 
 |  | 
 | template <typename T> struct X<T>::I { | 
 |   template <T ct> constexpr T f() { return ct + 1; }; | 
 |   T data = 7; | 
 | }; | 
 |  | 
 | static_assert(X<int>::I{}.f<17>() == 17); | 
 | static_assert(X<int>::I{}.data == 3); | 
 | static_assert(X<short>::I{}.data == 7); | 
 | static_assert(X<short>::I{}.f<18>() == 19); | 
 |  | 
 | template <typename T> struct Y { | 
 |   struct I; | 
 | }; | 
 |  | 
 | template <> struct Y<int> { | 
 |   struct I { | 
 |     template <int ct> constexpr int f() { return ct; }; | 
 |     int data = 3; | 
 |   }; | 
 | }; | 
 |  | 
 | static_assert(Y<int>::I{}.f<17>() == 17); | 
 | static_assert(Y<int>::I{}.data == 3); | 
 |  | 
 | } // namespace GH61159 |