Skip to content

Commit 51c0f37

Browse files
committed
Fixed the generated C# for templates with optional arguments.
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent db3e04c commit 51c0f37

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/Generator/Generators/CSharp/CSharpTypePrinter.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,8 +356,14 @@ public override TypePrinterResult VisitTemplateSpecializationType(
356356
if (ContextKind == TypePrinterContextKind.Managed &&
357357
decl == template.Template.TemplatedDecl &&
358358
template.Arguments.All(IsValid))
359+
{
360+
List<TemplateArgument> args = template.Arguments;
361+
var @class = (Class) template.Template.TemplatedDecl;
362+
TemplateArgument lastArg = args.Last();
359363
return $@"{VisitDeclaration(decl)}<{string.Join(", ",
360-
template.Arguments.Select(VisitTemplateArgument))}>";
364+
args.Concat(Enumerable.Range(0, @class.TemplateParameters.Count - args.Count).Select(
365+
i => lastArg)).Select(this.VisitTemplateArgument))}>";
366+
}
361367

362368
if (ContextKind == TypePrinterContextKind.Native)
363369
return template.Desugared.Visit(this);

tests/CSharp/CSharpTemplates.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,11 +374,18 @@ T& TemplateWithIndexer<T>::operator[](const char* string)
374374
return t[0];
375375
}
376376

377+
template <typename T1 = void, typename T2 = void, typename T3 = void, typename T4 = void,
378+
typename T5 = void, typename T6 = void, typename T7 = void, typename T8 = void>
379+
class OptionalTemplateArgs
380+
{
381+
};
382+
377383
template <typename T>
378384
class VirtualTemplate
379385
{
380386
public:
381387
VirtualTemplate();
388+
VirtualTemplate(OptionalTemplateArgs<T> optionalTemplateArgs);
382389
virtual ~VirtualTemplate();
383390
virtual int function();
384391
};
@@ -388,6 +395,11 @@ VirtualTemplate<T>::VirtualTemplate()
388395
{
389396
}
390397

398+
template <typename T>
399+
VirtualTemplate<T>::VirtualTemplate(OptionalTemplateArgs<T> optionalTemplateArgs)
400+
{
401+
}
402+
391403
template <typename T>
392404
VirtualTemplate<T>::~VirtualTemplate()
393405
{

0 commit comments

Comments
 (0)