Added support for template deduction guides

* Added DeductionGuide as a language element
This commit is contained in:
Justin Boswell
2023-11-30 23:07:03 -08:00
committed by Dustin Spicuzza
parent 64c5290318
commit 88a7048513
5 changed files with 164 additions and 11 deletions

View File

@@ -5,6 +5,7 @@ from cxxheaderparser.types import (
BaseClass,
ClassDecl,
DecltypeSpecifier,
DeductionGuide,
Field,
ForwardDecl,
Function,
@@ -2163,3 +2164,86 @@ def test_member_class_template_specialization() -> None:
]
)
)
def test_template_deduction_guide() -> None:
content = """
template <class CharT, class Traits = std::char_traits<CharT>>
Error(std::basic_string_view<CharT, Traits>) -> Error<std::string>;
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData(
namespace=NamespaceScope(
deduction_guides=[
DeductionGuide(
result_type=Type(
typename=PQName(
segments=[
NameSpecifier(
name="Error",
specialization=TemplateSpecialization(
args=[
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(name="std"),
NameSpecifier(
name="string"
),
]
)
)
)
]
),
)
]
)
),
name=PQName(segments=[NameSpecifier(name="Error")]),
parameters=[
Parameter(
type=Type(
typename=PQName(
segments=[
NameSpecifier(name="std"),
NameSpecifier(
name="basic_string_view",
specialization=TemplateSpecialization(
args=[
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="CharT"
)
]
)
)
),
TemplateArgument(
arg=Type(
typename=PQName(
segments=[
NameSpecifier(
name="Traits"
)
]
)
)
),
]
),
),
]
)
)
)
],
)
]
)
)