@@ -281,7 +281,8 @@ def test_template_dependent_nontype_default() -> None:
281281 segments = [
282282 NameSpecifier (name = "T" ),
283283 NameSpecifier (name = "type" ),
284- ]
284+ ],
285+ has_typename = True ,
285286 )
286287 ),
287288 name = "n" ,
@@ -1098,7 +1099,7 @@ class concat_iterator
10981099 void_t<decltype(((*std::declval<P>()).*std::declval<F>())(std::declval<T>()...))>>
10991100 : std::true_type {};
11001101
1101- template <typename T ...>
1102+ template <typename... T >
11021103 struct S : public T... {};
11031104 """
11041105 data = parse_string (content , cleandoc = True )
@@ -1636,12 +1637,9 @@ class concat_iterator
16361637 ],
16371638 template = TemplateDecl (
16381639 params = [
1639- TemplateNonTypeParam (
1640- type = Type (
1641- typename = PQName (
1642- segments = [NameSpecifier (name = "T" )]
1643- )
1644- ),
1640+ TemplateTypeParam (
1641+ typekey = "typename" ,
1642+ name = "T" ,
16451643 param_pack = True ,
16461644 )
16471645 ]
@@ -2417,3 +2415,55 @@ def test_deduction_sizeof_pack() -> None:
24172415 ]
24182416 )
24192417 )
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