@@ -1666,6 +1666,28 @@ class RoutineType extends Type, @routinetype {
16661666 }
16671667}
16681668
1669+ abstract private class TemplateParameterImpl extends Locatable {
1670+ override string getAPrimaryQlClass ( ) { result = "TemplateParameterImpl" }
1671+ }
1672+
1673+ /**
1674+ * A C++ template parameter.
1675+ *
1676+ * In the example below, `T`, `TT`, and `I` are template parameters:
1677+ * ```
1678+ * template <class T, template<typename> TT, int I>
1679+ * class C { };
1680+ * ```
1681+ */
1682+ final class TemplateParameterBase = TemplateParameterImpl ;
1683+
1684+ /**
1685+ * A C++ `typename` (or `class`) template parameter.
1686+ *
1687+ * DEPRECATED: Use `TypeTemplateParameter` instead.
1688+ */
1689+ deprecated class TemplateParameter = TypeTemplateParameter ;
1690+
16691691/**
16701692 * A C++ `typename` (or `class`) template parameter.
16711693 *
@@ -1675,12 +1697,12 @@ class RoutineType extends Type, @routinetype {
16751697 * class C { };
16761698 * ```
16771699 */
1678- class TemplateParameter extends UserType {
1679- TemplateParameter ( ) {
1700+ class TypeTemplateParameter extends UserType , TemplateParameterImpl {
1701+ TypeTemplateParameter ( ) {
16801702 usertypes ( underlyingElement ( this ) , _, 7 ) or usertypes ( underlyingElement ( this ) , _, 8 )
16811703 }
16821704
1683- override string getAPrimaryQlClass ( ) { result = "TemplateParameter " }
1705+ override string getAPrimaryQlClass ( ) { result = "TypeTemplateParameter " }
16841706
16851707 override predicate involvesTemplateParameter ( ) { any ( ) }
16861708}
@@ -1695,7 +1717,7 @@ class TemplateParameter extends UserType {
16951717 * void foo(const Container<Elem> &value) { }
16961718 * ```
16971719 */
1698- class TemplateTemplateParameter extends TemplateParameter {
1720+ class TemplateTemplateParameter extends TypeTemplateParameter {
16991721 TemplateTemplateParameter ( ) { usertypes ( underlyingElement ( this ) , _, 8 ) }
17001722
17011723 override string getAPrimaryQlClass ( ) { result = "TemplateTemplateParameter" }
@@ -1707,7 +1729,7 @@ class TemplateTemplateParameter extends TemplateParameter {
17071729 * auto val = some_typed_expr();
17081730 * ```
17091731 */
1710- class AutoType extends TemplateParameter {
1732+ class AutoType extends TypeTemplateParameter {
17111733 AutoType ( ) { usertypes ( underlyingElement ( this ) , "auto" , 7 ) }
17121734
17131735 override string getAPrimaryQlClass ( ) { result = "AutoType" }
0 commit comments