@@ -286,7 +286,7 @@ private void GenerateClassTemplateSpecializationsInternals(Class classTemplate,
286286 IList < ClassTemplateSpecialization > specializations )
287287 {
288288 PushBlock ( BlockKind . Namespace ) ;
289- var generated = GetGenerated ( specializations ) ;
289+ var generated = GetGeneratedClasses ( classTemplate , specializations ) ;
290290 WriteLine ( "namespace {0}{1}" ,
291291 classTemplate . OriginalNamespace is Class &&
292292 ! classTemplate . OriginalNamespace . IsDependent ?
@@ -304,7 +304,11 @@ classTemplate.OriginalNamespace is Class &&
304304
305305 foreach ( var group in generated . SelectMany ( s => s . Classes ) . Where (
306306 c => ! c . IsIncomplete ) . GroupBy ( c => c . Name ) )
307- GenerateNestedInternals ( group . Key , group ) ;
307+ {
308+ var nested = classTemplate . Classes . FirstOrDefault ( c => c . Name == group . Key ) ;
309+ if ( nested != null )
310+ GenerateNestedInternals ( group . Key , GetGeneratedClasses ( nested , group ) ) ;
311+ }
308312
309313 WriteCloseBraceIndent ( ) ;
310314 PopBlock ( NewLineKind . BeforeNextBlock ) ;
@@ -324,17 +328,16 @@ private void GenerateNestedInternals(string name, IEnumerable<Class> nestedClass
324328 NewLine ( ) ;
325329 }
326330
327- private IEnumerable < ClassTemplateSpecialization > GetGenerated (
328- IList < ClassTemplateSpecialization > specializations )
331+ private IEnumerable < Class > GetGeneratedClasses (
332+ Class dependentClass , IEnumerable < Class > specializedClasses )
329333 {
330- var specialization = specializations . FirstOrDefault ( s => s . IsGenerated ) ??
331- specializations [ 0 ] ;
334+ var specialization = specializedClasses . FirstOrDefault ( s => s . IsGenerated ) ??
335+ specializedClasses . First ( ) ;
332336
333- Class classTemplate = specialization . TemplatedDecl . TemplatedClass ;
334- if ( classTemplate . HasDependentValueFieldInLayout ( ) )
335- return specializations ;
337+ if ( dependentClass . HasDependentValueFieldInLayout ( ) )
338+ return specializedClasses ;
336339
337- return new List < ClassTemplateSpecialization > { specialization } ;
340+ return new [ ] { specialization } ;
338341 }
339342
340343 public override void GenerateDeclarationCommon ( Declaration decl )
0 commit comments