@@ -4949,6 +4949,30 @@ class cppfront
4949
4949
)
4950
4950
-> void
4951
4951
{
4952
+ // Helper for declarations with parent *template-head*s.
4953
+ auto const emit_parent_template_parameters = [&]() {
4954
+ auto parent_template_parameters = std::string{};
4955
+ auto parent = n.parent_declaration ;
4956
+ while (
4957
+ parent
4958
+ && parent->is_type ()
4959
+ )
4960
+ {
4961
+ if (parent->requires_clause_expression ) {
4962
+ parent_template_parameters =
4963
+ " requires( " + print_to_string (*parent->requires_clause_expression ) + " )\n "
4964
+ + parent_template_parameters;
4965
+ }
4966
+ if (parent->template_parameters ) {
4967
+ parent_template_parameters =
4968
+ " template " + print_to_string ( *parent->template_parameters , false , true )
4969
+ + " " + parent_template_parameters;
4970
+ }
4971
+ parent = parent->parent_declaration ;
4972
+ }
4973
+ printer.print_cpp2 (parent_template_parameters, n.position ());
4974
+ };
4975
+
4952
4976
// Helper for declarations that can have requires-clauses
4953
4977
auto const emit_requires_clause = [&]() {
4954
4978
if (
@@ -5142,46 +5166,12 @@ class cppfront
5142
5166
return ;
5143
5167
}
5144
5168
5145
- auto parent_template_params = std::string{};
5146
- auto parent_template_args = std::string{};
5147
- auto parent_qualifier = std::string{};
5148
-
5149
- auto parent = n.parent_declaration ;
5150
- while (parent && parent->is_type ())
5151
- {
5152
- if (!parent_qualifier.empty ()) {
5153
- parent_qualifier.insert (0 , " ::" );
5154
- }
5155
- parent_qualifier.insert (0 , parent->name ()->to_string ());
5156
-
5157
- if (parent->template_parameters ) {
5158
- parent_template_params.insert (0 , " template" + print_to_string (*parent->template_parameters ));
5159
- for (auto const & param : parent->template_parameters ->parameters ) {
5160
- assert (param->name ());
5161
- if (parent_template_args.empty ()) {
5162
- parent_template_args = " <>" ;
5163
- }
5164
- else {
5165
- parent_template_args.insert (parent_template_args.size ()-1 , " ," );
5166
- }
5167
- parent_template_args.insert (parent_template_args.size ()-1 , param->name ()->as_string_view ());
5168
- }
5169
- }
5170
-
5171
- parent = parent->parent_declaration ;
5172
- }
5173
-
5174
- if (!parent_template_params.empty ()) {
5175
- parent_template_params += " " ;
5176
- }
5177
-
5169
+ emit_parent_template_parameters ();
5178
5170
printer.print_cpp2 (
5179
- parent_template_params
5180
- + " inline CPP2_CONSTEXPR "
5171
+ " inline CPP2_CONSTEXPR "
5181
5172
+ type
5182
- + parent_template_args
5183
- + " " + parent_qualifier
5184
- + parent_template_args + " ::"
5173
+ + " "
5174
+ + type_qualification_if_any_for (n)
5185
5175
+ print_to_string (*n.identifier )
5186
5176
+ " = "
5187
5177
+ print_to_string ( *std::get<alias_node::an_object>(a->initializer ) )
@@ -5349,26 +5339,7 @@ class cppfront
5349
5339
&& n.initializer // only if the function has a definition (is not abstract)
5350
5340
)
5351
5341
{
5352
- auto parent_template_parameters = std::string{};
5353
- auto parent = n.parent_declaration ;
5354
- while (
5355
- parent
5356
- && parent->is_type ()
5357
- )
5358
- {
5359
- if (parent->requires_clause_expression ) {
5360
- parent_template_parameters =
5361
- " requires( " + print_to_string (*parent->requires_clause_expression ) + " )\n "
5362
- + parent_template_parameters;
5363
- }
5364
- if (parent->template_parameters ) {
5365
- parent_template_parameters =
5366
- " template " + print_to_string ( *parent->template_parameters , false , true )
5367
- + " " + parent_template_parameters;
5368
- }
5369
- parent = parent->parent_declaration ;
5370
- }
5371
- printer.print_cpp2 (parent_template_parameters, n.position ());
5342
+ emit_parent_template_parameters ();
5372
5343
}
5373
5344
5374
5345
// Now, emit our own template parameters
0 commit comments