erichkeane added a comment. Ok, Aaron and I are pretty confused here I think (based on offline discussions), so I'm hoping for some guidance.
`ParseTemplateTemplateParameter` does all the work to parse a template-template parameter, then calls `ActOnTemplateTemplateParameter`, which handles adding the top-level name to the scope (as well as warning if the params list is 0). Additionally, we noticed that: `template<template<typename T> class C = std::enable_if_t<T::value>> struct s{};` Is illegal in all compilers, `T` is not available in the `enable_if_t` call. This makes a lot of sense to me, since the `T` is essentially worthless: It can never be matched, it never gets a concrete type, etc. However, the test failure above does the equivilant of: `template<template<typename T> requires T::value class C> struct s{};` I note that MSVC and GCC accept this (no idea about EDG). However, this seems worthless/useless for the same reason. I guess it somewhat makes sense that the requires clause associated with the template-template-parameter-parameter-list should have access to names from the list, but they are still seemingly worthless to me. My expectation is that I could implement this by introducing a new `Scope` that contains all the names of the template-template-parameter-list and goes out of scope as soon as we're done with the `requires` clause. It seems strange to do so (and ends up having an `ActOnTemplateTemplateParameterParameterList` for this purpose, plus some level of 'pop-scope'), but seems consistent with the other compilers? I guess what I'm saying is in addition to the other questions raised above regarding whether these requires clauses are useful AT ALL, is that we likely require guidance to finish implementing this paper CHANGES SINCE LAST ACTION https://reviews.llvm.org/D110641/new/ https://reviews.llvm.org/D110641 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits