@@ -4905,6 +4905,30 @@ class cppfront
4905
4905
)
4906
4906
-> void
4907
4907
{
4908
+ // Helper for declarations with parent *template-head*s.
4909
+ auto const emit_parent_template_parameters = [&]() {
4910
+ auto parent_template_parameters = std::string{};
4911
+ auto parent = n.parent_declaration ;
4912
+ while (
4913
+ parent
4914
+ && parent->is_type ()
4915
+ )
4916
+ {
4917
+ if (parent->requires_clause_expression ) {
4918
+ parent_template_parameters =
4919
+ " requires( " + print_to_string (*parent->requires_clause_expression ) + " )\n "
4920
+ + parent_template_parameters;
4921
+ }
4922
+ if (parent->template_parameters ) {
4923
+ parent_template_parameters =
4924
+ " template " + print_to_string ( *parent->template_parameters , false , true )
4925
+ + " " + parent_template_parameters;
4926
+ }
4927
+ parent = parent->parent_declaration ;
4928
+ }
4929
+ printer.print_cpp2 (parent_template_parameters, n.position ());
4930
+ };
4931
+
4908
4932
// Helper for declarations that can have requires-clauses
4909
4933
auto const emit_requires_clause = [&]() {
4910
4934
if (
@@ -5089,10 +5113,11 @@ class cppfront
5089
5113
);
5090
5114
}
5091
5115
else if (printer.get_phase () == printer.phase2_func_defs ) {
5116
+ emit_parent_template_parameters ();
5092
5117
printer.print_cpp2 (
5093
5118
" inline constexpr "
5094
5119
+ type + " "
5095
- + n. parent_declaration -> name ()-> to_string () + " :: "
5120
+ + type_qualification_if_any_for (n)
5096
5121
+ print_to_string (*n.identifier )
5097
5122
+ " = "
5098
5123
+ print_to_string ( *std::get<alias_node::an_object>(a->initializer ) )
@@ -5260,26 +5285,7 @@ class cppfront
5260
5285
&& n.initializer // only if the function has a definition (is not abstract)
5261
5286
)
5262
5287
{
5263
- auto parent_template_parameters = std::string{};
5264
- auto parent = n.parent_declaration ;
5265
- while (
5266
- parent
5267
- && parent->is_type ()
5268
- )
5269
- {
5270
- if (parent->requires_clause_expression ) {
5271
- parent_template_parameters =
5272
- " requires( " + print_to_string (*parent->requires_clause_expression ) + " )\n "
5273
- + parent_template_parameters;
5274
- }
5275
- if (parent->template_parameters ) {
5276
- parent_template_parameters =
5277
- " template " + print_to_string ( *parent->template_parameters , false , true )
5278
- + " " + parent_template_parameters;
5279
- }
5280
- parent = parent->parent_declaration ;
5281
- }
5282
- printer.print_cpp2 (parent_template_parameters, n.position ());
5288
+ emit_parent_template_parameters ();
5283
5289
}
5284
5290
5285
5291
// Now, emit our own template parameters
0 commit comments