jcsxky wrote:

> This still doesn't handle cases such as:
> 
> ```c++
> template<typename T, typename U, typename V, typename W>
> concept E = sizeof(T) == sizeof(U) && sizeof(V) == sizeof(W);
> 
> template<typename T> // T = char
> struct A
> {
>     template<typename U> // U = signed char
>     struct B
>     {
>         template<typename V, typename W, typename X> // V = int, W = int, X = 
> short
>         requires E<T, U, V, W> // incorrectly substitutes T = int, U = short, 
> V = int, V = int
>         static void f();
>     };
> };
> 
> 
> template<typename T, typename U> // T = int, U = int
> struct C
> {
>     template<typename V> // V = short
>     struct D
>     {
>         friend void A<char>::B<signed char>::f<T, U, V>();
>     };
> };
> 
> template struct C<int, int>::D<short>;
> 
> extern template void A<char>::B<signed char>::f<int, int, short>();
> ```
> 
> (which is handled by 
> [be79079](https://github.com/llvm/llvm-project/commit/be79079507ffbd9b29683498f405dc2c32dd8ba7))

Thanks for your patience and testcases! They really make me understand these 
related issues more clearly.

https://github.com/llvm/llvm-project/pull/90646
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to