@@ -1666,6 +1666,30 @@ class RoutineType extends Type, @routinetype {
16661666 }
16671667}
16681668
1669+ /**
1670+ * A C++ template parameter.
1671+ *
1672+ * In the example below, `T` and `I` are template parameters:
1673+ * ```
1674+ * template <class T, int I>
1675+ * class C { };
1676+ * ```
1677+ */
1678+ abstract class TemplateParameterBase extends Locatable {
1679+ TemplateParameterBase ( ) {
1680+ usertypes ( underlyingElement ( this ) , _, 7 ) or usertypes ( underlyingElement ( this ) , _, 8 )
1681+ }
1682+
1683+ override string getAPrimaryQlClass ( ) { result = "TemplateParameterBase" }
1684+ }
1685+
1686+ /**
1687+ * A C++ `typename` (or `class`) template parameter.
1688+ *
1689+ * DEPRECATED: Use `TypeTemplateParameter` instead.
1690+ */
1691+ deprecated class TemplateParameter = TypeTemplateParameter ;
1692+
16691693/**
16701694 * A C++ `typename` (or `class`) template parameter.
16711695 *
@@ -1675,12 +1699,12 @@ class RoutineType extends Type, @routinetype {
16751699 * class C { };
16761700 * ```
16771701 */
1678- class TemplateParameter extends UserType {
1679- TemplateParameter ( ) {
1702+ class TypeTemplateParameter extends UserType , TemplateParameterBase {
1703+ TypeTemplateParameter ( ) {
16801704 usertypes ( underlyingElement ( this ) , _, 7 ) or usertypes ( underlyingElement ( this ) , _, 8 )
16811705 }
16821706
1683- override string getAPrimaryQlClass ( ) { result = "TemplateParameter " }
1707+ override string getAPrimaryQlClass ( ) { result = "TypeTemplateParameter " }
16841708
16851709 override predicate involvesTemplateParameter ( ) { any ( ) }
16861710}
@@ -1695,7 +1719,7 @@ class TemplateParameter extends UserType {
16951719 * void foo(const Container<Elem> &value) { }
16961720 * ```
16971721 */
1698- class TemplateTemplateParameter extends TemplateParameter {
1722+ class TemplateTemplateParameter extends TypeTemplateParameter {
16991723 TemplateTemplateParameter ( ) { usertypes ( underlyingElement ( this ) , _, 8 ) }
17001724
17011725 override string getAPrimaryQlClass ( ) { result = "TemplateTemplateParameter" }
@@ -1707,7 +1731,7 @@ class TemplateTemplateParameter extends TemplateParameter {
17071731 * auto val = some_typed_expr();
17081732 * ```
17091733 */
1710- class AutoType extends TemplateParameter {
1734+ class AutoType extends TypeTemplateParameter {
17111735 AutoType ( ) { usertypes ( underlyingElement ( this ) , "auto" , 7 ) }
17121736
17131737 override string getAPrimaryQlClass ( ) { result = "AutoType" }
0 commit comments