mizvekov wrote: These void_t examples comparing with GCC goes besides the point of the original issue.
This is closely related to how GCC 'solves' CWG1980. Their solution is to make an alias template with unused template parameters as non-transparent, as you say, making it a unique dependent type. So for GCC, this is not much different than if you changed `void_t<U>` to just `U`, for the sake of this example in particular. This is not a good solution, because it ties the questions of which type spellings are equivalent, into which are dependent, which should be orthogonal. And it doesn't provide a conforming solution for fully implementing CWG2064. By requiring types to be dependent when they don't need to be, just to satisfy equivalency, we hamper template semantic analysis and require 'typename' and 'template' keywords in a bunch of places that shouldn't be necessary. Which is why https://github.com/llvm/llvm-project/pull/190495 takes a different approach which keeps these concerns orthogonal. Template argument deduction doesn't care about equivalency, so the alias should be transparent for the purposes of partial ordering, making this ambiguous. https://github.com/llvm/llvm-project/pull/214130 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
