Skip to content

Commit caaf89d

Browse files
authored
Fix a crash when processing templates with variable arguments (#1641)
1 parent 0d84877 commit caaf89d

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

src/Generator/Passes/MatchParamNamesWithInstantiatedFromPass.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CppSharp.AST;
2+
using System;
23

34
namespace CppSharp.Passes
45
{
@@ -18,8 +19,8 @@ public override bool VisitFunctionDecl(Function function)
1819
(function.Namespace is ClassTemplateSpecialization specialization &&
1920
specialization.SpecializationKind == TemplateSpecializationKind.ExplicitSpecialization))
2021
return false;
21-
22-
for (int i = 0; i < function.Parameters.Count; i++)
22+
int parameters = Math.Min(function.Parameters.Count, function.InstantiatedFrom.Parameters.Count);
23+
for (int i = 0; i < parameters; i++)
2324
function.InstantiatedFrom.Parameters[i].Name = function.Parameters[i].Name;
2425

2526
return true;

tests/CSharp/CSharpTemplates.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,3 +842,12 @@ class ClassWithNonTypeTemplateArgument
842842

843843
class SpecializationOfClassWithNonTypeTemplateArgument : public ClassWithNonTypeTemplateArgument<0>
844844
{ };
845+
template<std::size_t N>
846+
class DLL_API FloatArrayF
847+
{
848+
public:
849+
template<typename... V, class = typename std::enable_if_t<sizeof...(V) == N>>
850+
FloatArrayF(V... x) { }
851+
852+
};
853+
const FloatArrayF<6> I6{ 1., 1., 1., 0., 0., 0. };

0 commit comments

Comments
 (0)