40 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s2// expected-no-diagnostics3 4namespace GH61159 {5template <typename T> struct X {6 struct I;7};8 9template <> struct X<int>::I {10 template <int ct> constexpr int f() { return ct; };11 12 int data = 3;13};14 15template <typename T> struct X<T>::I {16 template <T ct> constexpr T f() { return ct + 1; };17 T data = 7;18};19 20static_assert(X<int>::I{}.f<17>() == 17);21static_assert(X<int>::I{}.data == 3);22static_assert(X<short>::I{}.data == 7);23static_assert(X<short>::I{}.f<18>() == 19);24 25template <typename T> struct Y {26 struct I;27};28 29template <> struct Y<int> {30 struct I {31 template <int ct> constexpr int f() { return ct; };32 int data = 3;33 };34};35 36static_assert(Y<int>::I{}.f<17>() == 17);37static_assert(Y<int>::I{}.data == 3);38 39} // namespace GH6115940