@@ -35,7 +35,7 @@ public override bool VisitClassDecl(Class @class)
3535 if ( ! @class . IsDependent || @class . Specializations . Count == 0 )
3636 return false ;
3737
38- foreach ( var specialization in @class . Specializations )
38+ foreach ( var specialization in @class . Specializations . Where ( s => s . IsGenerated ) )
3939 specialization . ExplicitlyIgnore ( ) ;
4040
4141 // we only need a few members for marshalling so strip the rest
@@ -46,11 +46,14 @@ public override bool VisitClassDecl(Class @class)
4646 case "char_traits" :
4747 @class . GenerationKind = GenerationKind . Generate ;
4848 foreach ( var specialization in from s in @class . Specializations
49+ where ! s . Arguments . Any ( a =>
50+ s . UnsupportedTemplateArgument ( a , Context . TypeMaps ) )
4951 let arg = s . Arguments [ 0 ] . Type . Type . Desugar ( )
5052 where arg . IsPrimitiveType ( PrimitiveType . Char )
5153 select s )
5254 {
5355 specialization . GenerationKind = GenerationKind . Generate ;
56+ InternalizeSpecializationsInFields ( specialization ) ;
5457 }
5558 break ;
5659 }
@@ -100,5 +103,22 @@ public override bool VisitVariableDecl(Variable variable)
100103
101104 return true ;
102105 }
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+ }
103123 }
104124}
0 commit comments