Fixed handling of anonymous template parameters

This commit is contained in:
Bartek Kryza
2023-05-13 14:57:41 +02:00
parent 2223f595cd
commit 3b573ff034
6 changed files with 34 additions and 17 deletions

View File

@@ -1069,15 +1069,17 @@ std::optional<template_parameter> template_builder::try_as_template_parm_type(
auto argument = template_parameter::make_template_type("");
type = consume_context(type, argument);
argument.is_variadic(is_variadic);
auto type_parameter_name = common::to_string(type, cls->getASTContext());
ensure_lambda_type_is_relative(type_parameter_name);
if (type_parameter_name.empty())
type_parameter_name = "typename";
argument.set_name(map_type_parameter_to_template_parameter_name(
cls, type_parameter_name));
argument.is_variadic(is_variadic);
ensure_lambda_type_is_relative(type_parameter_name);
return argument;
}

View File

@@ -973,9 +973,13 @@ bool translation_unit_visitor::process_template_parameters(
default_arg =
template_type_parameter->getDefaultArgument().getAsString();
}
auto ct = template_parameter::make_template_type(
template_type_parameter->getNameAsString(), default_arg,
template_type_parameter->isParameterPack());
auto parameter_name = template_type_parameter->getNameAsString();
if (parameter_name.empty())
parameter_name = "typename";
auto ct = template_parameter::make_template_type(parameter_name,
default_arg, template_type_parameter->isParameterPack());
if (template_type_parameter->getTypeConstraint() != nullptr) {
util::apply_if_not_null(

View File

@@ -197,6 +197,10 @@ std::optional<std::string> template_parameter::name() const
if (!name_)
return {};
if (kind_ == template_parameter_kind_t::template_type &&
name_.has_value() && name_.value().empty())
return "typename";
if (is_variadic_ && (kind_ != template_parameter_kind_t::non_type_template))
return name_.value() + "...";