diff --git a/include/swift/AST/DiagnosticsClangImporter.def b/include/swift/AST/DiagnosticsClangImporter.def index 79abe54a3a5..e69e8612702 100644 --- a/include/swift/AST/DiagnosticsClangImporter.def +++ b/include/swift/AST/DiagnosticsClangImporter.def @@ -128,10 +128,6 @@ WARNING(libstdcxx_modulemap_not_found, none, "module map for libstdc++ not found for '%0'; C++ stdlib may be unavailable", (StringRef)) -WARNING(too_many_class_template_instantiations, none, - "template instantiation for '%0' not imported: too many instantiations", - (StringRef)) - WARNING(api_pattern_attr_ignored, none, "'%0' swift attribute ignored on type '%1': type is not copyable or destructible", (StringRef, StringRef)) diff --git a/lib/ClangImporter/ImportDecl.cpp b/lib/ClangImporter/ImportDecl.cpp index 4d2951ada26..0074766a469 100644 --- a/lib/ClangImporter/ImportDecl.cpp +++ b/lib/ClangImporter/ImportDecl.cpp @@ -2914,12 +2914,12 @@ namespace { if (size_t( llvm::size(decl->getSpecializedTemplate()->specializations())) > specializationLimit) { - std::string name; - llvm::raw_string_ostream os(name); - decl->printQualifiedName(os); - // Emit a warning if we haven't warned about this decl yet. - if (Impl.tooDeepTemplateSpecializations.insert(name).second) - Impl.diagnose({}, diag::too_many_class_template_instantiations, name); + // Note: it would be nice to import a dummy unavailable struct, + // but we would then need to instantiate the template here, + // as we cannot import a struct without a definition. That would + // defeat the purpose. Also, we can't make the dummy + // struct simply unavailable, as that still makes the + // typelias that references it available. return nullptr; } diff --git a/lib/ClangImporter/ImporterImpl.h b/lib/ClangImporter/ImporterImpl.h index a1d74132f78..a2b3e58280c 100644 --- a/lib/ClangImporter/ImporterImpl.h +++ b/lib/ClangImporter/ImporterImpl.h @@ -655,10 +655,6 @@ public: llvm::DenseMap specializedFunctionTemplates; - /// Stores qualified names of C++ template specializations that were too deep - /// to import into Swift. - llvm::StringSet<> tooDeepTemplateSpecializations; - /// Keeps track of the Clang functions that have been turned into /// properties. llvm::DenseMap FunctionsAsProperties; diff --git a/test/Interop/Cxx/templates/Inputs/many-specializations.h b/test/Interop/Cxx/templates/Inputs/many-specializations.h new file mode 100644 index 00000000000..d0087fdbd16 --- /dev/null +++ b/test/Interop/Cxx/templates/Inputs/many-specializations.h @@ -0,0 +1,3015 @@ +#ifndef TEST_INTEROP_CXX_TEMPLATES_INPUTS_MANY_SPECIALIZATIONS_H +#define TEST_INTEROP_CXX_TEMPLATES_INPUTS_MANY_SPECIALIZATIONS_H + +template +struct TemplateStruct { + T x; +}; + +struct S1 {}; +using T1 = TemplateStruct; + +struct S2 {}; +using T2 = TemplateStruct; + +struct S3 {}; +using T3 = TemplateStruct; + +struct S4 {}; +using T4 = TemplateStruct; + +struct S5 {}; +using T5 = TemplateStruct; + +struct S6 {}; +using T6 = TemplateStruct; + +struct S7 {}; +using T7 = TemplateStruct; + +struct S8 {}; +using T8 = TemplateStruct; + +struct S9 {}; +using T9 = TemplateStruct; + +struct S10 {}; +using T10 = TemplateStruct; + +struct S11 {}; +using T11 = TemplateStruct; + +struct S12 {}; +using T12 = TemplateStruct; + +struct S13 {}; +using T13 = TemplateStruct; + +struct S14 {}; +using T14 = TemplateStruct; + +struct S15 {}; +using T15 = TemplateStruct; + +struct S16 {}; +using T16 = TemplateStruct; + +struct S17 {}; +using T17 = TemplateStruct; + +struct S18 {}; +using T18 = TemplateStruct; + +struct S19 {}; +using T19 = TemplateStruct; + +struct S20 {}; +using T20 = TemplateStruct; + +struct S21 {}; +using T21 = TemplateStruct; + +struct S22 {}; +using T22 = TemplateStruct; + +struct S23 {}; +using T23 = TemplateStruct; + +struct S24 {}; +using T24 = TemplateStruct; + +struct S25 {}; +using T25 = TemplateStruct; + +struct S26 {}; +using T26 = TemplateStruct; + +struct S27 {}; +using T27 = TemplateStruct; + +struct S28 {}; +using T28 = TemplateStruct; + +struct S29 {}; +using T29 = TemplateStruct; + +struct S30 {}; +using T30 = TemplateStruct; + +struct S31 {}; +using T31 = TemplateStruct; + +struct S32 {}; +using T32 = TemplateStruct; + +struct S33 {}; +using T33 = TemplateStruct; + +struct S34 {}; +using T34 = TemplateStruct; + +struct S35 {}; +using T35 = TemplateStruct; + +struct S36 {}; +using T36 = TemplateStruct; + +struct S37 {}; +using T37 = TemplateStruct; + +struct S38 {}; +using T38 = TemplateStruct; + +struct S39 {}; +using T39 = TemplateStruct; + +struct S40 {}; +using T40 = TemplateStruct; + +struct S41 {}; +using T41 = TemplateStruct; + +struct S42 {}; +using T42 = TemplateStruct; + +struct S43 {}; +using T43 = TemplateStruct; + +struct S44 {}; +using T44 = TemplateStruct; + +struct S45 {}; +using T45 = TemplateStruct; + +struct S46 {}; +using T46 = TemplateStruct; + +struct S47 {}; +using T47 = TemplateStruct; + +struct S48 {}; +using T48 = TemplateStruct; + +struct S49 {}; +using T49 = TemplateStruct; + +struct S50 {}; +using T50 = TemplateStruct; + +struct S51 {}; +using T51 = TemplateStruct; + +struct S52 {}; +using T52 = TemplateStruct; + +struct S53 {}; +using T53 = TemplateStruct; + +struct S54 {}; +using T54 = TemplateStruct; + +struct S55 {}; +using T55 = TemplateStruct; + +struct S56 {}; +using T56 = TemplateStruct; + +struct S57 {}; +using T57 = TemplateStruct; + +struct S58 {}; +using T58 = TemplateStruct; + +struct S59 {}; +using T59 = TemplateStruct; + +struct S60 {}; +using T60 = TemplateStruct; + +struct S61 {}; +using T61 = TemplateStruct; + +struct S62 {}; +using T62 = TemplateStruct; + +struct S63 {}; +using T63 = TemplateStruct; + +struct S64 {}; +using T64 = TemplateStruct; + +struct S65 {}; +using T65 = TemplateStruct; + +struct S66 {}; +using T66 = TemplateStruct; + +struct S67 {}; +using T67 = TemplateStruct; + +struct S68 {}; +using T68 = TemplateStruct; + +struct S69 {}; +using T69 = TemplateStruct; + +struct S70 {}; +using T70 = TemplateStruct; + +struct S71 {}; +using T71 = TemplateStruct; + +struct S72 {}; +using T72 = TemplateStruct; + +struct S73 {}; +using T73 = TemplateStruct; + +struct S74 {}; +using T74 = TemplateStruct; + +struct S75 {}; +using T75 = TemplateStruct; + +struct S76 {}; +using T76 = TemplateStruct; + +struct S77 {}; +using T77 = TemplateStruct; + +struct S78 {}; +using T78 = TemplateStruct; + +struct S79 {}; +using T79 = TemplateStruct; + +struct S80 {}; +using T80 = TemplateStruct; + +struct S81 {}; +using T81 = TemplateStruct; + +struct S82 {}; +using T82 = TemplateStruct; + +struct S83 {}; +using T83 = TemplateStruct; + +struct S84 {}; +using T84 = TemplateStruct; + +struct S85 {}; +using T85 = TemplateStruct; + +struct S86 {}; +using T86 = TemplateStruct; + +struct S87 {}; +using T87 = TemplateStruct; + +struct S88 {}; +using T88 = TemplateStruct; + +struct S89 {}; +using T89 = TemplateStruct; + +struct S90 {}; +using T90 = TemplateStruct; + +struct S91 {}; +using T91 = TemplateStruct; + +struct S92 {}; +using T92 = TemplateStruct; + +struct S93 {}; +using T93 = TemplateStruct; + +struct S94 {}; +using T94 = TemplateStruct; + +struct S95 {}; +using T95 = TemplateStruct; + +struct S96 {}; +using T96 = TemplateStruct; + +struct S97 {}; +using T97 = TemplateStruct; + +struct S98 {}; +using T98 = TemplateStruct; + +struct S99 {}; +using T99 = TemplateStruct; + +struct S100 {}; +using T100 = TemplateStruct; + +struct S101 {}; +using T101 = TemplateStruct; + +struct S102 {}; +using T102 = TemplateStruct; + +struct S103 {}; +using T103 = TemplateStruct; + +struct S104 {}; +using T104 = TemplateStruct; + +struct S105 {}; +using T105 = TemplateStruct; + +struct S106 {}; +using T106 = TemplateStruct; + +struct S107 {}; +using T107 = TemplateStruct; + +struct S108 {}; +using T108 = TemplateStruct; + +struct S109 {}; +using T109 = TemplateStruct; + +struct S110 {}; +using T110 = TemplateStruct; + +struct S111 {}; +using T111 = TemplateStruct; + +struct S112 {}; +using T112 = TemplateStruct; + +struct S113 {}; +using T113 = TemplateStruct; + +struct S114 {}; +using T114 = TemplateStruct; + +struct S115 {}; +using T115 = TemplateStruct; + +struct S116 {}; +using T116 = TemplateStruct; + +struct S117 {}; +using T117 = TemplateStruct; + +struct S118 {}; +using T118 = TemplateStruct; + +struct S119 {}; +using T119 = TemplateStruct; + +struct S120 {}; +using T120 = TemplateStruct; + +struct S121 {}; +using T121 = TemplateStruct; + +struct S122 {}; +using T122 = TemplateStruct; + +struct S123 {}; +using T123 = TemplateStruct; + +struct S124 {}; +using T124 = TemplateStruct; + +struct S125 {}; +using T125 = TemplateStruct; + +struct S126 {}; +using T126 = TemplateStruct; + +struct S127 {}; +using T127 = TemplateStruct; + +struct S128 {}; +using T128 = TemplateStruct; + +struct S129 {}; +using T129 = TemplateStruct; + +struct S130 {}; +using T130 = TemplateStruct; + +struct S131 {}; +using T131 = TemplateStruct; + +struct S132 {}; +using T132 = TemplateStruct; + +struct S133 {}; +using T133 = TemplateStruct; + +struct S134 {}; +using T134 = TemplateStruct; + +struct S135 {}; +using T135 = TemplateStruct; + +struct S136 {}; +using T136 = TemplateStruct; + +struct S137 {}; +using T137 = TemplateStruct; + +struct S138 {}; +using T138 = TemplateStruct; + +struct S139 {}; +using T139 = TemplateStruct; + +struct S140 {}; +using T140 = TemplateStruct; + +struct S141 {}; +using T141 = TemplateStruct; + +struct S142 {}; +using T142 = TemplateStruct; + +struct S143 {}; +using T143 = TemplateStruct; + +struct S144 {}; +using T144 = TemplateStruct; + +struct S145 {}; +using T145 = TemplateStruct; + +struct S146 {}; +using T146 = TemplateStruct; + +struct S147 {}; +using T147 = TemplateStruct; + +struct S148 {}; +using T148 = TemplateStruct; + +struct S149 {}; +using T149 = TemplateStruct; + +struct S150 {}; +using T150 = TemplateStruct; + +struct S151 {}; +using T151 = TemplateStruct; + +struct S152 {}; +using T152 = TemplateStruct; + +struct S153 {}; +using T153 = TemplateStruct; + +struct S154 {}; +using T154 = TemplateStruct; + +struct S155 {}; +using T155 = TemplateStruct; + +struct S156 {}; +using T156 = TemplateStruct; + +struct S157 {}; +using T157 = TemplateStruct; + +struct S158 {}; +using T158 = TemplateStruct; + +struct S159 {}; +using T159 = TemplateStruct; + +struct S160 {}; +using T160 = TemplateStruct; + +struct S161 {}; +using T161 = TemplateStruct; + +struct S162 {}; +using T162 = TemplateStruct; + +struct S163 {}; +using T163 = TemplateStruct; + +struct S164 {}; +using T164 = TemplateStruct; + +struct S165 {}; +using T165 = TemplateStruct; + +struct S166 {}; +using T166 = TemplateStruct; + +struct S167 {}; +using T167 = TemplateStruct; + +struct S168 {}; +using T168 = TemplateStruct; + +struct S169 {}; +using T169 = TemplateStruct; + +struct S170 {}; +using T170 = TemplateStruct; + +struct S171 {}; +using T171 = TemplateStruct; + +struct S172 {}; +using T172 = TemplateStruct; + +struct S173 {}; +using T173 = TemplateStruct; + +struct S174 {}; +using T174 = TemplateStruct; + +struct S175 {}; +using T175 = TemplateStruct; + +struct S176 {}; +using T176 = TemplateStruct; + +struct S177 {}; +using T177 = TemplateStruct; + +struct S178 {}; +using T178 = TemplateStruct; + +struct S179 {}; +using T179 = TemplateStruct; + +struct S180 {}; +using T180 = TemplateStruct; + +struct S181 {}; +using T181 = TemplateStruct; + +struct S182 {}; +using T182 = TemplateStruct; + +struct S183 {}; +using T183 = TemplateStruct; + +struct S184 {}; +using T184 = TemplateStruct; + +struct S185 {}; +using T185 = TemplateStruct; + +struct S186 {}; +using T186 = TemplateStruct; + +struct S187 {}; +using T187 = TemplateStruct; + +struct S188 {}; +using T188 = TemplateStruct; + +struct S189 {}; +using T189 = TemplateStruct; + +struct S190 {}; +using T190 = TemplateStruct; + +struct S191 {}; +using T191 = TemplateStruct; + +struct S192 {}; +using T192 = TemplateStruct; + +struct S193 {}; +using T193 = TemplateStruct; + +struct S194 {}; +using T194 = TemplateStruct; + +struct S195 {}; +using T195 = TemplateStruct; + +struct S196 {}; +using T196 = TemplateStruct; + +struct S197 {}; +using T197 = TemplateStruct; + +struct S198 {}; +using T198 = TemplateStruct; + +struct S199 {}; +using T199 = TemplateStruct; + +struct S200 {}; +using T200 = TemplateStruct; + +struct S201 {}; +using T201 = TemplateStruct; + +struct S202 {}; +using T202 = TemplateStruct; + +struct S203 {}; +using T203 = TemplateStruct; + +struct S204 {}; +using T204 = TemplateStruct; + +struct S205 {}; +using T205 = TemplateStruct; + +struct S206 {}; +using T206 = TemplateStruct; + +struct S207 {}; +using T207 = TemplateStruct; + +struct S208 {}; +using T208 = TemplateStruct; + +struct S209 {}; +using T209 = TemplateStruct; + +struct S210 {}; +using T210 = TemplateStruct; + +struct S211 {}; +using T211 = TemplateStruct; + +struct S212 {}; +using T212 = TemplateStruct; + +struct S213 {}; +using T213 = TemplateStruct; + +struct S214 {}; +using T214 = TemplateStruct; + +struct S215 {}; +using T215 = TemplateStruct; + +struct S216 {}; +using T216 = TemplateStruct; + +struct S217 {}; +using T217 = TemplateStruct; + +struct S218 {}; +using T218 = TemplateStruct; + +struct S219 {}; +using T219 = TemplateStruct; + +struct S220 {}; +using T220 = TemplateStruct; + +struct S221 {}; +using T221 = TemplateStruct; + +struct S222 {}; +using T222 = TemplateStruct; + +struct S223 {}; +using T223 = TemplateStruct; + +struct S224 {}; +using T224 = TemplateStruct; + +struct S225 {}; +using T225 = TemplateStruct; + +struct S226 {}; +using T226 = TemplateStruct; + +struct S227 {}; +using T227 = TemplateStruct; + +struct S228 {}; +using T228 = TemplateStruct; + +struct S229 {}; +using T229 = TemplateStruct; + +struct S230 {}; +using T230 = TemplateStruct; + +struct S231 {}; +using T231 = TemplateStruct; + +struct S232 {}; +using T232 = TemplateStruct; + +struct S233 {}; +using T233 = TemplateStruct; + +struct S234 {}; +using T234 = TemplateStruct; + +struct S235 {}; +using T235 = TemplateStruct; + +struct S236 {}; +using T236 = TemplateStruct; + +struct S237 {}; +using T237 = TemplateStruct; + +struct S238 {}; +using T238 = TemplateStruct; + +struct S239 {}; +using T239 = TemplateStruct; + +struct S240 {}; +using T240 = TemplateStruct; + +struct S241 {}; +using T241 = TemplateStruct; + +struct S242 {}; +using T242 = TemplateStruct; + +struct S243 {}; +using T243 = TemplateStruct; + +struct S244 {}; +using T244 = TemplateStruct; + +struct S245 {}; +using T245 = TemplateStruct; + +struct S246 {}; +using T246 = TemplateStruct; + +struct S247 {}; +using T247 = TemplateStruct; + +struct S248 {}; +using T248 = TemplateStruct; + +struct S249 {}; +using T249 = TemplateStruct; + +struct S250 {}; +using T250 = TemplateStruct; + +struct S251 {}; +using T251 = TemplateStruct; + +struct S252 {}; +using T252 = TemplateStruct; + +struct S253 {}; +using T253 = TemplateStruct; + +struct S254 {}; +using T254 = TemplateStruct; + +struct S255 {}; +using T255 = TemplateStruct; + +struct S256 {}; +using T256 = TemplateStruct; + +struct S257 {}; +using T257 = TemplateStruct; + +struct S258 {}; +using T258 = TemplateStruct; + +struct S259 {}; +using T259 = TemplateStruct; + +struct S260 {}; +using T260 = TemplateStruct; + +struct S261 {}; +using T261 = TemplateStruct; + +struct S262 {}; +using T262 = TemplateStruct; + +struct S263 {}; +using T263 = TemplateStruct; + +struct S264 {}; +using T264 = TemplateStruct; + +struct S265 {}; +using T265 = TemplateStruct; + +struct S266 {}; +using T266 = TemplateStruct; + +struct S267 {}; +using T267 = TemplateStruct; + +struct S268 {}; +using T268 = TemplateStruct; + +struct S269 {}; +using T269 = TemplateStruct; + +struct S270 {}; +using T270 = TemplateStruct; + +struct S271 {}; +using T271 = TemplateStruct; + +struct S272 {}; +using T272 = TemplateStruct; + +struct S273 {}; +using T273 = TemplateStruct; + +struct S274 {}; +using T274 = TemplateStruct; + +struct S275 {}; +using T275 = TemplateStruct; + +struct S276 {}; +using T276 = TemplateStruct; + +struct S277 {}; +using T277 = TemplateStruct; + +struct S278 {}; +using T278 = TemplateStruct; + +struct S279 {}; +using T279 = TemplateStruct; + +struct S280 {}; +using T280 = TemplateStruct; + +struct S281 {}; +using T281 = TemplateStruct; + +struct S282 {}; +using T282 = TemplateStruct; + +struct S283 {}; +using T283 = TemplateStruct; + +struct S284 {}; +using T284 = TemplateStruct; + +struct S285 {}; +using T285 = TemplateStruct; + +struct S286 {}; +using T286 = TemplateStruct; + +struct S287 {}; +using T287 = TemplateStruct; + +struct S288 {}; +using T288 = TemplateStruct; + +struct S289 {}; +using T289 = TemplateStruct; + +struct S290 {}; +using T290 = TemplateStruct; + +struct S291 {}; +using T291 = TemplateStruct; + +struct S292 {}; +using T292 = TemplateStruct; + +struct S293 {}; +using T293 = TemplateStruct; + +struct S294 {}; +using T294 = TemplateStruct; + +struct S295 {}; +using T295 = TemplateStruct; + +struct S296 {}; +using T296 = TemplateStruct; + +struct S297 {}; +using T297 = TemplateStruct; + +struct S298 {}; +using T298 = TemplateStruct; + +struct S299 {}; +using T299 = TemplateStruct; + +struct S300 {}; +using T300 = TemplateStruct; + +struct S301 {}; +using T301 = TemplateStruct; + +struct S302 {}; +using T302 = TemplateStruct; + +struct S303 {}; +using T303 = TemplateStruct; + +struct S304 {}; +using T304 = TemplateStruct; + +struct S305 {}; +using T305 = TemplateStruct; + +struct S306 {}; +using T306 = TemplateStruct; + +struct S307 {}; +using T307 = TemplateStruct; + +struct S308 {}; +using T308 = TemplateStruct; + +struct S309 {}; +using T309 = TemplateStruct; + +struct S310 {}; +using T310 = TemplateStruct; + +struct S311 {}; +using T311 = TemplateStruct; + +struct S312 {}; +using T312 = TemplateStruct; + +struct S313 {}; +using T313 = TemplateStruct; + +struct S314 {}; +using T314 = TemplateStruct; + +struct S315 {}; +using T315 = TemplateStruct; + +struct S316 {}; +using T316 = TemplateStruct; + +struct S317 {}; +using T317 = TemplateStruct; + +struct S318 {}; +using T318 = TemplateStruct; + +struct S319 {}; +using T319 = TemplateStruct; + +struct S320 {}; +using T320 = TemplateStruct; + +struct S321 {}; +using T321 = TemplateStruct; + +struct S322 {}; +using T322 = TemplateStruct; + +struct S323 {}; +using T323 = TemplateStruct; + +struct S324 {}; +using T324 = TemplateStruct; + +struct S325 {}; +using T325 = TemplateStruct; + +struct S326 {}; +using T326 = TemplateStruct; + +struct S327 {}; +using T327 = TemplateStruct; + +struct S328 {}; +using T328 = TemplateStruct; + +struct S329 {}; +using T329 = TemplateStruct; + +struct S330 {}; +using T330 = TemplateStruct; + +struct S331 {}; +using T331 = TemplateStruct; + +struct S332 {}; +using T332 = TemplateStruct; + +struct S333 {}; +using T333 = TemplateStruct; + +struct S334 {}; +using T334 = TemplateStruct; + +struct S335 {}; +using T335 = TemplateStruct; + +struct S336 {}; +using T336 = TemplateStruct; + +struct S337 {}; +using T337 = TemplateStruct; + +struct S338 {}; +using T338 = TemplateStruct; + +struct S339 {}; +using T339 = TemplateStruct; + +struct S340 {}; +using T340 = TemplateStruct; + +struct S341 {}; +using T341 = TemplateStruct; + +struct S342 {}; +using T342 = TemplateStruct; + +struct S343 {}; +using T343 = TemplateStruct; + +struct S344 {}; +using T344 = TemplateStruct; + +struct S345 {}; +using T345 = TemplateStruct; + +struct S346 {}; +using T346 = TemplateStruct; + +struct S347 {}; +using T347 = TemplateStruct; + +struct S348 {}; +using T348 = TemplateStruct; + +struct S349 {}; +using T349 = TemplateStruct; + +struct S350 {}; +using T350 = TemplateStruct; + +struct S351 {}; +using T351 = TemplateStruct; + +struct S352 {}; +using T352 = TemplateStruct; + +struct S353 {}; +using T353 = TemplateStruct; + +struct S354 {}; +using T354 = TemplateStruct; + +struct S355 {}; +using T355 = TemplateStruct; + +struct S356 {}; +using T356 = TemplateStruct; + +struct S357 {}; +using T357 = TemplateStruct; + +struct S358 {}; +using T358 = TemplateStruct; + +struct S359 {}; +using T359 = TemplateStruct; + +struct S360 {}; +using T360 = TemplateStruct; + +struct S361 {}; +using T361 = TemplateStruct; + +struct S362 {}; +using T362 = TemplateStruct; + +struct S363 {}; +using T363 = TemplateStruct; + +struct S364 {}; +using T364 = TemplateStruct; + +struct S365 {}; +using T365 = TemplateStruct; + +struct S366 {}; +using T366 = TemplateStruct; + +struct S367 {}; +using T367 = TemplateStruct; + +struct S368 {}; +using T368 = TemplateStruct; + +struct S369 {}; +using T369 = TemplateStruct; + +struct S370 {}; +using T370 = TemplateStruct; + +struct S371 {}; +using T371 = TemplateStruct; + +struct S372 {}; +using T372 = TemplateStruct; + +struct S373 {}; +using T373 = TemplateStruct; + +struct S374 {}; +using T374 = TemplateStruct; + +struct S375 {}; +using T375 = TemplateStruct; + +struct S376 {}; +using T376 = TemplateStruct; + +struct S377 {}; +using T377 = TemplateStruct; + +struct S378 {}; +using T378 = TemplateStruct; + +struct S379 {}; +using T379 = TemplateStruct; + +struct S380 {}; +using T380 = TemplateStruct; + +struct S381 {}; +using T381 = TemplateStruct; + +struct S382 {}; +using T382 = TemplateStruct; + +struct S383 {}; +using T383 = TemplateStruct; + +struct S384 {}; +using T384 = TemplateStruct; + +struct S385 {}; +using T385 = TemplateStruct; + +struct S386 {}; +using T386 = TemplateStruct; + +struct S387 {}; +using T387 = TemplateStruct; + +struct S388 {}; +using T388 = TemplateStruct; + +struct S389 {}; +using T389 = TemplateStruct; + +struct S390 {}; +using T390 = TemplateStruct; + +struct S391 {}; +using T391 = TemplateStruct; + +struct S392 {}; +using T392 = TemplateStruct; + +struct S393 {}; +using T393 = TemplateStruct; + +struct S394 {}; +using T394 = TemplateStruct; + +struct S395 {}; +using T395 = TemplateStruct; + +struct S396 {}; +using T396 = TemplateStruct; + +struct S397 {}; +using T397 = TemplateStruct; + +struct S398 {}; +using T398 = TemplateStruct; + +struct S399 {}; +using T399 = TemplateStruct; + +struct S400 {}; +using T400 = TemplateStruct; + +struct S401 {}; +using T401 = TemplateStruct; + +struct S402 {}; +using T402 = TemplateStruct; + +struct S403 {}; +using T403 = TemplateStruct; + +struct S404 {}; +using T404 = TemplateStruct; + +struct S405 {}; +using T405 = TemplateStruct; + +struct S406 {}; +using T406 = TemplateStruct; + +struct S407 {}; +using T407 = TemplateStruct; + +struct S408 {}; +using T408 = TemplateStruct; + +struct S409 {}; +using T409 = TemplateStruct; + +struct S410 {}; +using T410 = TemplateStruct; + +struct S411 {}; +using T411 = TemplateStruct; + +struct S412 {}; +using T412 = TemplateStruct; + +struct S413 {}; +using T413 = TemplateStruct; + +struct S414 {}; +using T414 = TemplateStruct; + +struct S415 {}; +using T415 = TemplateStruct; + +struct S416 {}; +using T416 = TemplateStruct; + +struct S417 {}; +using T417 = TemplateStruct; + +struct S418 {}; +using T418 = TemplateStruct; + +struct S419 {}; +using T419 = TemplateStruct; + +struct S420 {}; +using T420 = TemplateStruct; + +struct S421 {}; +using T421 = TemplateStruct; + +struct S422 {}; +using T422 = TemplateStruct; + +struct S423 {}; +using T423 = TemplateStruct; + +struct S424 {}; +using T424 = TemplateStruct; + +struct S425 {}; +using T425 = TemplateStruct; + +struct S426 {}; +using T426 = TemplateStruct; + +struct S427 {}; +using T427 = TemplateStruct; + +struct S428 {}; +using T428 = TemplateStruct; + +struct S429 {}; +using T429 = TemplateStruct; + +struct S430 {}; +using T430 = TemplateStruct; + +struct S431 {}; +using T431 = TemplateStruct; + +struct S432 {}; +using T432 = TemplateStruct; + +struct S433 {}; +using T433 = TemplateStruct; + +struct S434 {}; +using T434 = TemplateStruct; + +struct S435 {}; +using T435 = TemplateStruct; + +struct S436 {}; +using T436 = TemplateStruct; + +struct S437 {}; +using T437 = TemplateStruct; + +struct S438 {}; +using T438 = TemplateStruct; + +struct S439 {}; +using T439 = TemplateStruct; + +struct S440 {}; +using T440 = TemplateStruct; + +struct S441 {}; +using T441 = TemplateStruct; + +struct S442 {}; +using T442 = TemplateStruct; + +struct S443 {}; +using T443 = TemplateStruct; + +struct S444 {}; +using T444 = TemplateStruct; + +struct S445 {}; +using T445 = TemplateStruct; + +struct S446 {}; +using T446 = TemplateStruct; + +struct S447 {}; +using T447 = TemplateStruct; + +struct S448 {}; +using T448 = TemplateStruct; + +struct S449 {}; +using T449 = TemplateStruct; + +struct S450 {}; +using T450 = TemplateStruct; + +struct S451 {}; +using T451 = TemplateStruct; + +struct S452 {}; +using T452 = TemplateStruct; + +struct S453 {}; +using T453 = TemplateStruct; + +struct S454 {}; +using T454 = TemplateStruct; + +struct S455 {}; +using T455 = TemplateStruct; + +struct S456 {}; +using T456 = TemplateStruct; + +struct S457 {}; +using T457 = TemplateStruct; + +struct S458 {}; +using T458 = TemplateStruct; + +struct S459 {}; +using T459 = TemplateStruct; + +struct S460 {}; +using T460 = TemplateStruct; + +struct S461 {}; +using T461 = TemplateStruct; + +struct S462 {}; +using T462 = TemplateStruct; + +struct S463 {}; +using T463 = TemplateStruct; + +struct S464 {}; +using T464 = TemplateStruct; + +struct S465 {}; +using T465 = TemplateStruct; + +struct S466 {}; +using T466 = TemplateStruct; + +struct S467 {}; +using T467 = TemplateStruct; + +struct S468 {}; +using T468 = TemplateStruct; + +struct S469 {}; +using T469 = TemplateStruct; + +struct S470 {}; +using T470 = TemplateStruct; + +struct S471 {}; +using T471 = TemplateStruct; + +struct S472 {}; +using T472 = TemplateStruct; + +struct S473 {}; +using T473 = TemplateStruct; + +struct S474 {}; +using T474 = TemplateStruct; + +struct S475 {}; +using T475 = TemplateStruct; + +struct S476 {}; +using T476 = TemplateStruct; + +struct S477 {}; +using T477 = TemplateStruct; + +struct S478 {}; +using T478 = TemplateStruct; + +struct S479 {}; +using T479 = TemplateStruct; + +struct S480 {}; +using T480 = TemplateStruct; + +struct S481 {}; +using T481 = TemplateStruct; + +struct S482 {}; +using T482 = TemplateStruct; + +struct S483 {}; +using T483 = TemplateStruct; + +struct S484 {}; +using T484 = TemplateStruct; + +struct S485 {}; +using T485 = TemplateStruct; + +struct S486 {}; +using T486 = TemplateStruct; + +struct S487 {}; +using T487 = TemplateStruct; + +struct S488 {}; +using T488 = TemplateStruct; + +struct S489 {}; +using T489 = TemplateStruct; + +struct S490 {}; +using T490 = TemplateStruct; + +struct S491 {}; +using T491 = TemplateStruct; + +struct S492 {}; +using T492 = TemplateStruct; + +struct S493 {}; +using T493 = TemplateStruct; + +struct S494 {}; +using T494 = TemplateStruct; + +struct S495 {}; +using T495 = TemplateStruct; + +struct S496 {}; +using T496 = TemplateStruct; + +struct S497 {}; +using T497 = TemplateStruct; + +struct S498 {}; +using T498 = TemplateStruct; + +struct S499 {}; +using T499 = TemplateStruct; + +struct S500 {}; +using T500 = TemplateStruct; + +struct S501 {}; +using T501 = TemplateStruct; + +struct S502 {}; +using T502 = TemplateStruct; + +struct S503 {}; +using T503 = TemplateStruct; + +struct S504 {}; +using T504 = TemplateStruct; + +struct S505 {}; +using T505 = TemplateStruct; + +struct S506 {}; +using T506 = TemplateStruct; + +struct S507 {}; +using T507 = TemplateStruct; + +struct S508 {}; +using T508 = TemplateStruct; + +struct S509 {}; +using T509 = TemplateStruct; + +struct S510 {}; +using T510 = TemplateStruct; + +struct S511 {}; +using T511 = TemplateStruct; + +struct S512 {}; +using T512 = TemplateStruct; + +struct S513 {}; +using T513 = TemplateStruct; + +struct S514 {}; +using T514 = TemplateStruct; + +struct S515 {}; +using T515 = TemplateStruct; + +struct S516 {}; +using T516 = TemplateStruct; + +struct S517 {}; +using T517 = TemplateStruct; + +struct S518 {}; +using T518 = TemplateStruct; + +struct S519 {}; +using T519 = TemplateStruct; + +struct S520 {}; +using T520 = TemplateStruct; + +struct S521 {}; +using T521 = TemplateStruct; + +struct S522 {}; +using T522 = TemplateStruct; + +struct S523 {}; +using T523 = TemplateStruct; + +struct S524 {}; +using T524 = TemplateStruct; + +struct S525 {}; +using T525 = TemplateStruct; + +struct S526 {}; +using T526 = TemplateStruct; + +struct S527 {}; +using T527 = TemplateStruct; + +struct S528 {}; +using T528 = TemplateStruct; + +struct S529 {}; +using T529 = TemplateStruct; + +struct S530 {}; +using T530 = TemplateStruct; + +struct S531 {}; +using T531 = TemplateStruct; + +struct S532 {}; +using T532 = TemplateStruct; + +struct S533 {}; +using T533 = TemplateStruct; + +struct S534 {}; +using T534 = TemplateStruct; + +struct S535 {}; +using T535 = TemplateStruct; + +struct S536 {}; +using T536 = TemplateStruct; + +struct S537 {}; +using T537 = TemplateStruct; + +struct S538 {}; +using T538 = TemplateStruct; + +struct S539 {}; +using T539 = TemplateStruct; + +struct S540 {}; +using T540 = TemplateStruct; + +struct S541 {}; +using T541 = TemplateStruct; + +struct S542 {}; +using T542 = TemplateStruct; + +struct S543 {}; +using T543 = TemplateStruct; + +struct S544 {}; +using T544 = TemplateStruct; + +struct S545 {}; +using T545 = TemplateStruct; + +struct S546 {}; +using T546 = TemplateStruct; + +struct S547 {}; +using T547 = TemplateStruct; + +struct S548 {}; +using T548 = TemplateStruct; + +struct S549 {}; +using T549 = TemplateStruct; + +struct S550 {}; +using T550 = TemplateStruct; + +struct S551 {}; +using T551 = TemplateStruct; + +struct S552 {}; +using T552 = TemplateStruct; + +struct S553 {}; +using T553 = TemplateStruct; + +struct S554 {}; +using T554 = TemplateStruct; + +struct S555 {}; +using T555 = TemplateStruct; + +struct S556 {}; +using T556 = TemplateStruct; + +struct S557 {}; +using T557 = TemplateStruct; + +struct S558 {}; +using T558 = TemplateStruct; + +struct S559 {}; +using T559 = TemplateStruct; + +struct S560 {}; +using T560 = TemplateStruct; + +struct S561 {}; +using T561 = TemplateStruct; + +struct S562 {}; +using T562 = TemplateStruct; + +struct S563 {}; +using T563 = TemplateStruct; + +struct S564 {}; +using T564 = TemplateStruct; + +struct S565 {}; +using T565 = TemplateStruct; + +struct S566 {}; +using T566 = TemplateStruct; + +struct S567 {}; +using T567 = TemplateStruct; + +struct S568 {}; +using T568 = TemplateStruct; + +struct S569 {}; +using T569 = TemplateStruct; + +struct S570 {}; +using T570 = TemplateStruct; + +struct S571 {}; +using T571 = TemplateStruct; + +struct S572 {}; +using T572 = TemplateStruct; + +struct S573 {}; +using T573 = TemplateStruct; + +struct S574 {}; +using T574 = TemplateStruct; + +struct S575 {}; +using T575 = TemplateStruct; + +struct S576 {}; +using T576 = TemplateStruct; + +struct S577 {}; +using T577 = TemplateStruct; + +struct S578 {}; +using T578 = TemplateStruct; + +struct S579 {}; +using T579 = TemplateStruct; + +struct S580 {}; +using T580 = TemplateStruct; + +struct S581 {}; +using T581 = TemplateStruct; + +struct S582 {}; +using T582 = TemplateStruct; + +struct S583 {}; +using T583 = TemplateStruct; + +struct S584 {}; +using T584 = TemplateStruct; + +struct S585 {}; +using T585 = TemplateStruct; + +struct S586 {}; +using T586 = TemplateStruct; + +struct S587 {}; +using T587 = TemplateStruct; + +struct S588 {}; +using T588 = TemplateStruct; + +struct S589 {}; +using T589 = TemplateStruct; + +struct S590 {}; +using T590 = TemplateStruct; + +struct S591 {}; +using T591 = TemplateStruct; + +struct S592 {}; +using T592 = TemplateStruct; + +struct S593 {}; +using T593 = TemplateStruct; + +struct S594 {}; +using T594 = TemplateStruct; + +struct S595 {}; +using T595 = TemplateStruct; + +struct S596 {}; +using T596 = TemplateStruct; + +struct S597 {}; +using T597 = TemplateStruct; + +struct S598 {}; +using T598 = TemplateStruct; + +struct S599 {}; +using T599 = TemplateStruct; + +struct S600 {}; +using T600 = TemplateStruct; + +struct S601 {}; +using T601 = TemplateStruct; + +struct S602 {}; +using T602 = TemplateStruct; + +struct S603 {}; +using T603 = TemplateStruct; + +struct S604 {}; +using T604 = TemplateStruct; + +struct S605 {}; +using T605 = TemplateStruct; + +struct S606 {}; +using T606 = TemplateStruct; + +struct S607 {}; +using T607 = TemplateStruct; + +struct S608 {}; +using T608 = TemplateStruct; + +struct S609 {}; +using T609 = TemplateStruct; + +struct S610 {}; +using T610 = TemplateStruct; + +struct S611 {}; +using T611 = TemplateStruct; + +struct S612 {}; +using T612 = TemplateStruct; + +struct S613 {}; +using T613 = TemplateStruct; + +struct S614 {}; +using T614 = TemplateStruct; + +struct S615 {}; +using T615 = TemplateStruct; + +struct S616 {}; +using T616 = TemplateStruct; + +struct S617 {}; +using T617 = TemplateStruct; + +struct S618 {}; +using T618 = TemplateStruct; + +struct S619 {}; +using T619 = TemplateStruct; + +struct S620 {}; +using T620 = TemplateStruct; + +struct S621 {}; +using T621 = TemplateStruct; + +struct S622 {}; +using T622 = TemplateStruct; + +struct S623 {}; +using T623 = TemplateStruct; + +struct S624 {}; +using T624 = TemplateStruct; + +struct S625 {}; +using T625 = TemplateStruct; + +struct S626 {}; +using T626 = TemplateStruct; + +struct S627 {}; +using T627 = TemplateStruct; + +struct S628 {}; +using T628 = TemplateStruct; + +struct S629 {}; +using T629 = TemplateStruct; + +struct S630 {}; +using T630 = TemplateStruct; + +struct S631 {}; +using T631 = TemplateStruct; + +struct S632 {}; +using T632 = TemplateStruct; + +struct S633 {}; +using T633 = TemplateStruct; + +struct S634 {}; +using T634 = TemplateStruct; + +struct S635 {}; +using T635 = TemplateStruct; + +struct S636 {}; +using T636 = TemplateStruct; + +struct S637 {}; +using T637 = TemplateStruct; + +struct S638 {}; +using T638 = TemplateStruct; + +struct S639 {}; +using T639 = TemplateStruct; + +struct S640 {}; +using T640 = TemplateStruct; + +struct S641 {}; +using T641 = TemplateStruct; + +struct S642 {}; +using T642 = TemplateStruct; + +struct S643 {}; +using T643 = TemplateStruct; + +struct S644 {}; +using T644 = TemplateStruct; + +struct S645 {}; +using T645 = TemplateStruct; + +struct S646 {}; +using T646 = TemplateStruct; + +struct S647 {}; +using T647 = TemplateStruct; + +struct S648 {}; +using T648 = TemplateStruct; + +struct S649 {}; +using T649 = TemplateStruct; + +struct S650 {}; +using T650 = TemplateStruct; + +struct S651 {}; +using T651 = TemplateStruct; + +struct S652 {}; +using T652 = TemplateStruct; + +struct S653 {}; +using T653 = TemplateStruct; + +struct S654 {}; +using T654 = TemplateStruct; + +struct S655 {}; +using T655 = TemplateStruct; + +struct S656 {}; +using T656 = TemplateStruct; + +struct S657 {}; +using T657 = TemplateStruct; + +struct S658 {}; +using T658 = TemplateStruct; + +struct S659 {}; +using T659 = TemplateStruct; + +struct S660 {}; +using T660 = TemplateStruct; + +struct S661 {}; +using T661 = TemplateStruct; + +struct S662 {}; +using T662 = TemplateStruct; + +struct S663 {}; +using T663 = TemplateStruct; + +struct S664 {}; +using T664 = TemplateStruct; + +struct S665 {}; +using T665 = TemplateStruct; + +struct S666 {}; +using T666 = TemplateStruct; + +struct S667 {}; +using T667 = TemplateStruct; + +struct S668 {}; +using T668 = TemplateStruct; + +struct S669 {}; +using T669 = TemplateStruct; + +struct S670 {}; +using T670 = TemplateStruct; + +struct S671 {}; +using T671 = TemplateStruct; + +struct S672 {}; +using T672 = TemplateStruct; + +struct S673 {}; +using T673 = TemplateStruct; + +struct S674 {}; +using T674 = TemplateStruct; + +struct S675 {}; +using T675 = TemplateStruct; + +struct S676 {}; +using T676 = TemplateStruct; + +struct S677 {}; +using T677 = TemplateStruct; + +struct S678 {}; +using T678 = TemplateStruct; + +struct S679 {}; +using T679 = TemplateStruct; + +struct S680 {}; +using T680 = TemplateStruct; + +struct S681 {}; +using T681 = TemplateStruct; + +struct S682 {}; +using T682 = TemplateStruct; + +struct S683 {}; +using T683 = TemplateStruct; + +struct S684 {}; +using T684 = TemplateStruct; + +struct S685 {}; +using T685 = TemplateStruct; + +struct S686 {}; +using T686 = TemplateStruct; + +struct S687 {}; +using T687 = TemplateStruct; + +struct S688 {}; +using T688 = TemplateStruct; + +struct S689 {}; +using T689 = TemplateStruct; + +struct S690 {}; +using T690 = TemplateStruct; + +struct S691 {}; +using T691 = TemplateStruct; + +struct S692 {}; +using T692 = TemplateStruct; + +struct S693 {}; +using T693 = TemplateStruct; + +struct S694 {}; +using T694 = TemplateStruct; + +struct S695 {}; +using T695 = TemplateStruct; + +struct S696 {}; +using T696 = TemplateStruct; + +struct S697 {}; +using T697 = TemplateStruct; + +struct S698 {}; +using T698 = TemplateStruct; + +struct S699 {}; +using T699 = TemplateStruct; + +struct S700 {}; +using T700 = TemplateStruct; + +struct S701 {}; +using T701 = TemplateStruct; + +struct S702 {}; +using T702 = TemplateStruct; + +struct S703 {}; +using T703 = TemplateStruct; + +struct S704 {}; +using T704 = TemplateStruct; + +struct S705 {}; +using T705 = TemplateStruct; + +struct S706 {}; +using T706 = TemplateStruct; + +struct S707 {}; +using T707 = TemplateStruct; + +struct S708 {}; +using T708 = TemplateStruct; + +struct S709 {}; +using T709 = TemplateStruct; + +struct S710 {}; +using T710 = TemplateStruct; + +struct S711 {}; +using T711 = TemplateStruct; + +struct S712 {}; +using T712 = TemplateStruct; + +struct S713 {}; +using T713 = TemplateStruct; + +struct S714 {}; +using T714 = TemplateStruct; + +struct S715 {}; +using T715 = TemplateStruct; + +struct S716 {}; +using T716 = TemplateStruct; + +struct S717 {}; +using T717 = TemplateStruct; + +struct S718 {}; +using T718 = TemplateStruct; + +struct S719 {}; +using T719 = TemplateStruct; + +struct S720 {}; +using T720 = TemplateStruct; + +struct S721 {}; +using T721 = TemplateStruct; + +struct S722 {}; +using T722 = TemplateStruct; + +struct S723 {}; +using T723 = TemplateStruct; + +struct S724 {}; +using T724 = TemplateStruct; + +struct S725 {}; +using T725 = TemplateStruct; + +struct S726 {}; +using T726 = TemplateStruct; + +struct S727 {}; +using T727 = TemplateStruct; + +struct S728 {}; +using T728 = TemplateStruct; + +struct S729 {}; +using T729 = TemplateStruct; + +struct S730 {}; +using T730 = TemplateStruct; + +struct S731 {}; +using T731 = TemplateStruct; + +struct S732 {}; +using T732 = TemplateStruct; + +struct S733 {}; +using T733 = TemplateStruct; + +struct S734 {}; +using T734 = TemplateStruct; + +struct S735 {}; +using T735 = TemplateStruct; + +struct S736 {}; +using T736 = TemplateStruct; + +struct S737 {}; +using T737 = TemplateStruct; + +struct S738 {}; +using T738 = TemplateStruct; + +struct S739 {}; +using T739 = TemplateStruct; + +struct S740 {}; +using T740 = TemplateStruct; + +struct S741 {}; +using T741 = TemplateStruct; + +struct S742 {}; +using T742 = TemplateStruct; + +struct S743 {}; +using T743 = TemplateStruct; + +struct S744 {}; +using T744 = TemplateStruct; + +struct S745 {}; +using T745 = TemplateStruct; + +struct S746 {}; +using T746 = TemplateStruct; + +struct S747 {}; +using T747 = TemplateStruct; + +struct S748 {}; +using T748 = TemplateStruct; + +struct S749 {}; +using T749 = TemplateStruct; + +struct S750 {}; +using T750 = TemplateStruct; + +struct S751 {}; +using T751 = TemplateStruct; + +struct S752 {}; +using T752 = TemplateStruct; + +struct S753 {}; +using T753 = TemplateStruct; + +struct S754 {}; +using T754 = TemplateStruct; + +struct S755 {}; +using T755 = TemplateStruct; + +struct S756 {}; +using T756 = TemplateStruct; + +struct S757 {}; +using T757 = TemplateStruct; + +struct S758 {}; +using T758 = TemplateStruct; + +struct S759 {}; +using T759 = TemplateStruct; + +struct S760 {}; +using T760 = TemplateStruct; + +struct S761 {}; +using T761 = TemplateStruct; + +struct S762 {}; +using T762 = TemplateStruct; + +struct S763 {}; +using T763 = TemplateStruct; + +struct S764 {}; +using T764 = TemplateStruct; + +struct S765 {}; +using T765 = TemplateStruct; + +struct S766 {}; +using T766 = TemplateStruct; + +struct S767 {}; +using T767 = TemplateStruct; + +struct S768 {}; +using T768 = TemplateStruct; + +struct S769 {}; +using T769 = TemplateStruct; + +struct S770 {}; +using T770 = TemplateStruct; + +struct S771 {}; +using T771 = TemplateStruct; + +struct S772 {}; +using T772 = TemplateStruct; + +struct S773 {}; +using T773 = TemplateStruct; + +struct S774 {}; +using T774 = TemplateStruct; + +struct S775 {}; +using T775 = TemplateStruct; + +struct S776 {}; +using T776 = TemplateStruct; + +struct S777 {}; +using T777 = TemplateStruct; + +struct S778 {}; +using T778 = TemplateStruct; + +struct S779 {}; +using T779 = TemplateStruct; + +struct S780 {}; +using T780 = TemplateStruct; + +struct S781 {}; +using T781 = TemplateStruct; + +struct S782 {}; +using T782 = TemplateStruct; + +struct S783 {}; +using T783 = TemplateStruct; + +struct S784 {}; +using T784 = TemplateStruct; + +struct S785 {}; +using T785 = TemplateStruct; + +struct S786 {}; +using T786 = TemplateStruct; + +struct S787 {}; +using T787 = TemplateStruct; + +struct S788 {}; +using T788 = TemplateStruct; + +struct S789 {}; +using T789 = TemplateStruct; + +struct S790 {}; +using T790 = TemplateStruct; + +struct S791 {}; +using T791 = TemplateStruct; + +struct S792 {}; +using T792 = TemplateStruct; + +struct S793 {}; +using T793 = TemplateStruct; + +struct S794 {}; +using T794 = TemplateStruct; + +struct S795 {}; +using T795 = TemplateStruct; + +struct S796 {}; +using T796 = TemplateStruct; + +struct S797 {}; +using T797 = TemplateStruct; + +struct S798 {}; +using T798 = TemplateStruct; + +struct S799 {}; +using T799 = TemplateStruct; + +struct S800 {}; +using T800 = TemplateStruct; + +struct S801 {}; +using T801 = TemplateStruct; + +struct S802 {}; +using T802 = TemplateStruct; + +struct S803 {}; +using T803 = TemplateStruct; + +struct S804 {}; +using T804 = TemplateStruct; + +struct S805 {}; +using T805 = TemplateStruct; + +struct S806 {}; +using T806 = TemplateStruct; + +struct S807 {}; +using T807 = TemplateStruct; + +struct S808 {}; +using T808 = TemplateStruct; + +struct S809 {}; +using T809 = TemplateStruct; + +struct S810 {}; +using T810 = TemplateStruct; + +struct S811 {}; +using T811 = TemplateStruct; + +struct S812 {}; +using T812 = TemplateStruct; + +struct S813 {}; +using T813 = TemplateStruct; + +struct S814 {}; +using T814 = TemplateStruct; + +struct S815 {}; +using T815 = TemplateStruct; + +struct S816 {}; +using T816 = TemplateStruct; + +struct S817 {}; +using T817 = TemplateStruct; + +struct S818 {}; +using T818 = TemplateStruct; + +struct S819 {}; +using T819 = TemplateStruct; + +struct S820 {}; +using T820 = TemplateStruct; + +struct S821 {}; +using T821 = TemplateStruct; + +struct S822 {}; +using T822 = TemplateStruct; + +struct S823 {}; +using T823 = TemplateStruct; + +struct S824 {}; +using T824 = TemplateStruct; + +struct S825 {}; +using T825 = TemplateStruct; + +struct S826 {}; +using T826 = TemplateStruct; + +struct S827 {}; +using T827 = TemplateStruct; + +struct S828 {}; +using T828 = TemplateStruct; + +struct S829 {}; +using T829 = TemplateStruct; + +struct S830 {}; +using T830 = TemplateStruct; + +struct S831 {}; +using T831 = TemplateStruct; + +struct S832 {}; +using T832 = TemplateStruct; + +struct S833 {}; +using T833 = TemplateStruct; + +struct S834 {}; +using T834 = TemplateStruct; + +struct S835 {}; +using T835 = TemplateStruct; + +struct S836 {}; +using T836 = TemplateStruct; + +struct S837 {}; +using T837 = TemplateStruct; + +struct S838 {}; +using T838 = TemplateStruct; + +struct S839 {}; +using T839 = TemplateStruct; + +struct S840 {}; +using T840 = TemplateStruct; + +struct S841 {}; +using T841 = TemplateStruct; + +struct S842 {}; +using T842 = TemplateStruct; + +struct S843 {}; +using T843 = TemplateStruct; + +struct S844 {}; +using T844 = TemplateStruct; + +struct S845 {}; +using T845 = TemplateStruct; + +struct S846 {}; +using T846 = TemplateStruct; + +struct S847 {}; +using T847 = TemplateStruct; + +struct S848 {}; +using T848 = TemplateStruct; + +struct S849 {}; +using T849 = TemplateStruct; + +struct S850 {}; +using T850 = TemplateStruct; + +struct S851 {}; +using T851 = TemplateStruct; + +struct S852 {}; +using T852 = TemplateStruct; + +struct S853 {}; +using T853 = TemplateStruct; + +struct S854 {}; +using T854 = TemplateStruct; + +struct S855 {}; +using T855 = TemplateStruct; + +struct S856 {}; +using T856 = TemplateStruct; + +struct S857 {}; +using T857 = TemplateStruct; + +struct S858 {}; +using T858 = TemplateStruct; + +struct S859 {}; +using T859 = TemplateStruct; + +struct S860 {}; +using T860 = TemplateStruct; + +struct S861 {}; +using T861 = TemplateStruct; + +struct S862 {}; +using T862 = TemplateStruct; + +struct S863 {}; +using T863 = TemplateStruct; + +struct S864 {}; +using T864 = TemplateStruct; + +struct S865 {}; +using T865 = TemplateStruct; + +struct S866 {}; +using T866 = TemplateStruct; + +struct S867 {}; +using T867 = TemplateStruct; + +struct S868 {}; +using T868 = TemplateStruct; + +struct S869 {}; +using T869 = TemplateStruct; + +struct S870 {}; +using T870 = TemplateStruct; + +struct S871 {}; +using T871 = TemplateStruct; + +struct S872 {}; +using T872 = TemplateStruct; + +struct S873 {}; +using T873 = TemplateStruct; + +struct S874 {}; +using T874 = TemplateStruct; + +struct S875 {}; +using T875 = TemplateStruct; + +struct S876 {}; +using T876 = TemplateStruct; + +struct S877 {}; +using T877 = TemplateStruct; + +struct S878 {}; +using T878 = TemplateStruct; + +struct S879 {}; +using T879 = TemplateStruct; + +struct S880 {}; +using T880 = TemplateStruct; + +struct S881 {}; +using T881 = TemplateStruct; + +struct S882 {}; +using T882 = TemplateStruct; + +struct S883 {}; +using T883 = TemplateStruct; + +struct S884 {}; +using T884 = TemplateStruct; + +struct S885 {}; +using T885 = TemplateStruct; + +struct S886 {}; +using T886 = TemplateStruct; + +struct S887 {}; +using T887 = TemplateStruct; + +struct S888 {}; +using T888 = TemplateStruct; + +struct S889 {}; +using T889 = TemplateStruct; + +struct S890 {}; +using T890 = TemplateStruct; + +struct S891 {}; +using T891 = TemplateStruct; + +struct S892 {}; +using T892 = TemplateStruct; + +struct S893 {}; +using T893 = TemplateStruct; + +struct S894 {}; +using T894 = TemplateStruct; + +struct S895 {}; +using T895 = TemplateStruct; + +struct S896 {}; +using T896 = TemplateStruct; + +struct S897 {}; +using T897 = TemplateStruct; + +struct S898 {}; +using T898 = TemplateStruct; + +struct S899 {}; +using T899 = TemplateStruct; + +struct S900 {}; +using T900 = TemplateStruct; + +struct S901 {}; +using T901 = TemplateStruct; + +struct S902 {}; +using T902 = TemplateStruct; + +struct S903 {}; +using T903 = TemplateStruct; + +struct S904 {}; +using T904 = TemplateStruct; + +struct S905 {}; +using T905 = TemplateStruct; + +struct S906 {}; +using T906 = TemplateStruct; + +struct S907 {}; +using T907 = TemplateStruct; + +struct S908 {}; +using T908 = TemplateStruct; + +struct S909 {}; +using T909 = TemplateStruct; + +struct S910 {}; +using T910 = TemplateStruct; + +struct S911 {}; +using T911 = TemplateStruct; + +struct S912 {}; +using T912 = TemplateStruct; + +struct S913 {}; +using T913 = TemplateStruct; + +struct S914 {}; +using T914 = TemplateStruct; + +struct S915 {}; +using T915 = TemplateStruct; + +struct S916 {}; +using T916 = TemplateStruct; + +struct S917 {}; +using T917 = TemplateStruct; + +struct S918 {}; +using T918 = TemplateStruct; + +struct S919 {}; +using T919 = TemplateStruct; + +struct S920 {}; +using T920 = TemplateStruct; + +struct S921 {}; +using T921 = TemplateStruct; + +struct S922 {}; +using T922 = TemplateStruct; + +struct S923 {}; +using T923 = TemplateStruct; + +struct S924 {}; +using T924 = TemplateStruct; + +struct S925 {}; +using T925 = TemplateStruct; + +struct S926 {}; +using T926 = TemplateStruct; + +struct S927 {}; +using T927 = TemplateStruct; + +struct S928 {}; +using T928 = TemplateStruct; + +struct S929 {}; +using T929 = TemplateStruct; + +struct S930 {}; +using T930 = TemplateStruct; + +struct S931 {}; +using T931 = TemplateStruct; + +struct S932 {}; +using T932 = TemplateStruct; + +struct S933 {}; +using T933 = TemplateStruct; + +struct S934 {}; +using T934 = TemplateStruct; + +struct S935 {}; +using T935 = TemplateStruct; + +struct S936 {}; +using T936 = TemplateStruct; + +struct S937 {}; +using T937 = TemplateStruct; + +struct S938 {}; +using T938 = TemplateStruct; + +struct S939 {}; +using T939 = TemplateStruct; + +struct S940 {}; +using T940 = TemplateStruct; + +struct S941 {}; +using T941 = TemplateStruct; + +struct S942 {}; +using T942 = TemplateStruct; + +struct S943 {}; +using T943 = TemplateStruct; + +struct S944 {}; +using T944 = TemplateStruct; + +struct S945 {}; +using T945 = TemplateStruct; + +struct S946 {}; +using T946 = TemplateStruct; + +struct S947 {}; +using T947 = TemplateStruct; + +struct S948 {}; +using T948 = TemplateStruct; + +struct S949 {}; +using T949 = TemplateStruct; + +struct S950 {}; +using T950 = TemplateStruct; + +struct S951 {}; +using T951 = TemplateStruct; + +struct S952 {}; +using T952 = TemplateStruct; + +struct S953 {}; +using T953 = TemplateStruct; + +struct S954 {}; +using T954 = TemplateStruct; + +struct S955 {}; +using T955 = TemplateStruct; + +struct S956 {}; +using T956 = TemplateStruct; + +struct S957 {}; +using T957 = TemplateStruct; + +struct S958 {}; +using T958 = TemplateStruct; + +struct S959 {}; +using T959 = TemplateStruct; + +struct S960 {}; +using T960 = TemplateStruct; + +struct S961 {}; +using T961 = TemplateStruct; + +struct S962 {}; +using T962 = TemplateStruct; + +struct S963 {}; +using T963 = TemplateStruct; + +struct S964 {}; +using T964 = TemplateStruct; + +struct S965 {}; +using T965 = TemplateStruct; + +struct S966 {}; +using T966 = TemplateStruct; + +struct S967 {}; +using T967 = TemplateStruct; + +struct S968 {}; +using T968 = TemplateStruct; + +struct S969 {}; +using T969 = TemplateStruct; + +struct S970 {}; +using T970 = TemplateStruct; + +struct S971 {}; +using T971 = TemplateStruct; + +struct S972 {}; +using T972 = TemplateStruct; + +struct S973 {}; +using T973 = TemplateStruct; + +struct S974 {}; +using T974 = TemplateStruct; + +struct S975 {}; +using T975 = TemplateStruct; + +struct S976 {}; +using T976 = TemplateStruct; + +struct S977 {}; +using T977 = TemplateStruct; + +struct S978 {}; +using T978 = TemplateStruct; + +struct S979 {}; +using T979 = TemplateStruct; + +struct S980 {}; +using T980 = TemplateStruct; + +struct S981 {}; +using T981 = TemplateStruct; + +struct S982 {}; +using T982 = TemplateStruct; + +struct S983 {}; +using T983 = TemplateStruct; + +struct S984 {}; +using T984 = TemplateStruct; + +struct S985 {}; +using T985 = TemplateStruct; + +struct S986 {}; +using T986 = TemplateStruct; + +struct S987 {}; +using T987 = TemplateStruct; + +struct S988 {}; +using T988 = TemplateStruct; + +struct S989 {}; +using T989 = TemplateStruct; + +struct S990 {}; +using T990 = TemplateStruct; + +struct S991 {}; +using T991 = TemplateStruct; + +struct S992 {}; +using T992 = TemplateStruct; + +struct S993 {}; +using T993 = TemplateStruct; + +struct S994 {}; +using T994 = TemplateStruct; + +struct S995 {}; +using T995 = TemplateStruct; + +struct S996 {}; +using T996 = TemplateStruct; + +struct S997 {}; +using T997 = TemplateStruct; + +struct S998 {}; +using T998 = TemplateStruct; + +struct S999 {}; +using T999 = TemplateStruct; + +struct S1000 {}; +using T1000 = TemplateStruct; + +struct S1001 {}; +using T1001 = TemplateStruct; + +struct S1002 {}; +using T1002 = TemplateStruct; + +#endif // TEST_INTEROP_CXX_TEMPLATES_INPUTS_MANY_SPECIALIZATIONS_H diff --git a/test/Interop/Cxx/templates/Inputs/module.modulemap b/test/Interop/Cxx/templates/Inputs/module.modulemap index 7fabfc88594..b515f161277 100644 --- a/test/Interop/Cxx/templates/Inputs/module.modulemap +++ b/test/Interop/Cxx/templates/Inputs/module.modulemap @@ -152,3 +152,8 @@ module UnevaluatedContext { header "unevaluated-context.h" requires cplusplus } + +module ManySpecializations { + header "many-specializations.h" + requires cplusplus +} diff --git a/test/Interop/Cxx/templates/many-specializations.swift b/test/Interop/Cxx/templates/many-specializations.swift new file mode 100644 index 00000000000..a1ae3f5f43a --- /dev/null +++ b/test/Interop/Cxx/templates/many-specializations.swift @@ -0,0 +1,8 @@ +// RUN: %target-swift-ide-test -print-module -module-to-print=ManySpecializations -I %S/Inputs -source-filename=x -enable-experimental-cxx-interop | %FileCheck %s + + +// CHECK: @available(*, unavailable, message: "Un-specialized class templates are not currently supported. Please use a specialization of this type.") +// CHECK-NEXT: struct TemplateStruct { +// CHECK-NEXT: } + +// CHECK-NOT: typealias