Commit c07c745b by Jason Merrill

c++: Template template parameter in constraint [PR95371]

gcc/cp/ChangeLog:

	PR c++/95371
	* pt.c (process_template_parm): Set DECL_TEMPLATE_INFO
	on the DECL_TEMPLATE_RESULT.

gcc/testsuite/ChangeLog:

	PR c++/95371
	* g++.dg/cpp2a/concepts-ttp1.C: New test.

(cherry picked from commit d91b3aea7a5bdfbdaec746af2d62894812e6fd86)
parent af254bf1
......@@ -4575,7 +4575,16 @@ process_template_parm (tree list, location_t parm_loc, tree parm,
/* This is for distinguishing between real templates and template
template parameters */
TREE_TYPE (parm) = t;
TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
/* any_template_parm_r expects to be able to get the targs of a
DECL_TEMPLATE_RESULT. */
tree result = DECL_TEMPLATE_RESULT (parm);
TREE_TYPE (result) = t;
tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (parm));
tree tinfo = build_template_info (parm, args);
retrofit_lang_decl (result);
DECL_TEMPLATE_INFO (result) = tinfo;
decl = parm;
}
else
......
// PR c++/95371
// { dg-do compile { target c++20 } }
template <typename...>
struct configuration {
template <template <typename...> typename query_t>
static constexpr bool exists() { return true; }
template <template <typename...> typename query_t>
void remove() requires(exists<query_t>());
};
int main() {
configuration<> cfg{};
cfg.remove<configuration>();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment