@@ -35,7 +35,7 @@ public override bool VisitClassDecl(Class @class)
35
35
if ( ! @class . IsDependent || @class . Specializations . Count == 0 )
36
36
return false ;
37
37
38
- foreach ( var specialization in @class . Specializations )
38
+ foreach ( var specialization in @class . Specializations . Where ( s => s . IsGenerated ) )
39
39
specialization . ExplicitlyIgnore ( ) ;
40
40
41
41
// we only need a few members for marshalling so strip the rest
@@ -46,11 +46,14 @@ public override bool VisitClassDecl(Class @class)
46
46
case "char_traits" :
47
47
@class . GenerationKind = GenerationKind . Generate ;
48
48
foreach ( var specialization in from s in @class . Specializations
49
+ where ! s . Arguments . Any ( a =>
50
+ s . UnsupportedTemplateArgument ( a , Context . TypeMaps ) )
49
51
let arg = s . Arguments [ 0 ] . Type . Type . Desugar ( )
50
52
where arg . IsPrimitiveType ( PrimitiveType . Char )
51
53
select s )
52
54
{
53
55
specialization . GenerationKind = GenerationKind . Generate ;
56
+ InternalizeSpecializationsInFields ( specialization ) ;
54
57
}
55
58
break ;
56
59
}
@@ -100,5 +103,22 @@ public override bool VisitVariableDecl(Variable variable)
100
103
101
104
return true ;
102
105
}
106
+
107
+ private void InternalizeSpecializationsInFields ( ClassTemplateSpecialization specialization )
108
+ {
109
+ foreach ( Field field in specialization . Fields )
110
+ {
111
+ ASTUtils . CheckTypeForSpecialization ( field . Type , specialization ,
112
+ specialization =>
113
+ {
114
+ if ( ! specialization . IsExplicitlyGenerated &&
115
+ specialization . GenerationKind != GenerationKind . Internal )
116
+ {
117
+ specialization . GenerationKind = GenerationKind . Internal ;
118
+ InternalizeSpecializationsInFields ( specialization ) ;
119
+ }
120
+ } , Context . TypeMaps , true ) ;
121
+ }
122
+ }
103
123
}
104
124
}
0 commit comments