Recently, I unexpectedly found that gcc and msvc accept the following code (notice the requires-clause in template-list):
#include <vector>
template <template <class> requires true class>
void f() {}
int main() {
f<std::vector>();
}
and clang rejects its grammar with:
<source>:3:28: error: template template parameter requires 'class' after the parameter list
template <template <class> requires true class>
^
Which compiler should I trust? Is this code grammatically valid?