================
@@ -1414,7 +1414,7 @@ namespace dr96 { // dr96: no
     // FIXME: This is ill-formed, because 'f' is not a template-id and does not
----------------
opensdh wrote:

Yes, P1787R6 deprecated that use case; you're supposed to just not use 
`template` there.  This is consistent with the _recommendation_ in N1528, but 
of course we now reject the premise that `template` is _needed_ for a template 
template argument.  The reasoning, if it helps, is that compilers already have 
to deal with ambiguity there:
```cpp
template<auto> void f();                                // #1
template<class> void f(int=0);                          // #2
template<template<class> class> void f(void*=nullptr);  // #3

template<class T> void g() {
  // in C++20, [temp.res]/6 and [temp.arg.template]/1 contradict each other 
here:
  f<T::Q>();             // could be #1 or #3
}
template<class T> struct X {
  // OK per [temp.local]/1
  void h() {f<X>(T());}  // could be #2 or #3
  void i() {T::template R<X>();}  // could be anything
}
```
Accordingly, [CWG1478](https://cplusplus.github.io/CWG/issues/1478.html)'s 
question was answered in the negative, and `template` (is to be) restricted to 
the case where it influences the interpretation of a `<`.

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

Reply via email to