@@ -281,7 +281,8 @@ def test_template_dependent_nontype_default() -> None:
281
281
segments = [
282
282
NameSpecifier (name = "T" ),
283
283
NameSpecifier (name = "type" ),
284
- ]
284
+ ],
285
+ has_typename = True ,
285
286
)
286
287
),
287
288
name = "n" ,
@@ -1098,7 +1099,7 @@ class concat_iterator
1098
1099
void_t<decltype(((*std::declval<P>()).*std::declval<F>())(std::declval<T>()...))>>
1099
1100
: std::true_type {};
1100
1101
1101
- template <typename T ...>
1102
+ template <typename... T >
1102
1103
struct S : public T... {};
1103
1104
"""
1104
1105
data = parse_string (content , cleandoc = True )
@@ -1636,12 +1637,9 @@ class concat_iterator
1636
1637
],
1637
1638
template = TemplateDecl (
1638
1639
params = [
1639
- TemplateNonTypeParam (
1640
- type = Type (
1641
- typename = PQName (
1642
- segments = [NameSpecifier (name = "T" )]
1643
- )
1644
- ),
1640
+ TemplateTypeParam (
1641
+ typekey = "typename" ,
1642
+ name = "T" ,
1645
1643
param_pack = True ,
1646
1644
)
1647
1645
]
@@ -2417,3 +2415,55 @@ def test_deduction_sizeof_pack() -> None:
2417
2415
]
2418
2416
)
2419
2417
)
2418
+
2419
+
2420
+ def test_template_has_typename () -> None :
2421
+ content = """
2422
+ template<typename T::Q value>
2423
+ void func(typename V::U arg) {}
2424
+ """
2425
+ data = parse_string (content , cleandoc = True )
2426
+
2427
+ assert data == ParsedData (
2428
+ namespace = NamespaceScope (
2429
+ functions = [
2430
+ Function (
2431
+ return_type = Type (
2432
+ typename = PQName (segments = [FundamentalSpecifier (name = "void" )])
2433
+ ),
2434
+ name = PQName (segments = [NameSpecifier (name = "func" )]),
2435
+ parameters = [
2436
+ Parameter (
2437
+ type = Type (
2438
+ typename = PQName (
2439
+ segments = [
2440
+ NameSpecifier (name = "V" ),
2441
+ NameSpecifier (name = "U" ),
2442
+ ],
2443
+ has_typename = True ,
2444
+ )
2445
+ ),
2446
+ name = "arg" ,
2447
+ )
2448
+ ],
2449
+ has_body = True ,
2450
+ template = TemplateDecl (
2451
+ params = [
2452
+ TemplateNonTypeParam (
2453
+ type = Type (
2454
+ typename = PQName (
2455
+ segments = [
2456
+ NameSpecifier (name = "T" ),
2457
+ NameSpecifier (name = "Q" ),
2458
+ ],
2459
+ has_typename = True ,
2460
+ )
2461
+ ),
2462
+ name = "value" ,
2463
+ )
2464
+ ]
2465
+ ),
2466
+ )
2467
+ ]
2468
+ )
2469
+ )
0 commit comments