Fixed handling of anonymous template parameters
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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() + "...";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user