|
4 | 4 |
|
5 | 5 | import semmle.code.cpp.Element |
6 | 6 | import semmle.code.cpp.Function |
| 7 | +import semmle.code.cpp.TemplateParameter |
7 | 8 | private import semmle.code.cpp.internal.ResolveClass |
8 | 9 |
|
9 | 10 | /** |
@@ -288,10 +289,7 @@ class Type extends Locatable, @type { |
288 | 289 | */ |
289 | 290 | Type stripType() { result = this } |
290 | 291 |
|
291 | | - override Location getLocation() { |
292 | | - suppressUnusedThis(this) and |
293 | | - result instanceof UnknownDefaultLocation |
294 | | - } |
| 292 | + override Location getLocation() { result instanceof UnknownDefaultLocation } |
295 | 293 | } |
296 | 294 |
|
297 | 295 | /** |
@@ -1666,82 +1664,6 @@ class RoutineType extends Type, @routinetype { |
1666 | 1664 | } |
1667 | 1665 | } |
1668 | 1666 |
|
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 | | - |
1691 | | -/** |
1692 | | - * A C++ `typename` (or `class`) template parameter. |
1693 | | - * |
1694 | | - * In the example below, `T` is a template parameter: |
1695 | | - * ``` |
1696 | | - * template <class T> |
1697 | | - * class C { }; |
1698 | | - * ``` |
1699 | | - */ |
1700 | | -class TypeTemplateParameter extends UserType, TemplateParameterImpl { |
1701 | | - TypeTemplateParameter() { |
1702 | | - usertypes(underlyingElement(this), _, 7) or usertypes(underlyingElement(this), _, 8) |
1703 | | - } |
1704 | | - |
1705 | | - override string getAPrimaryQlClass() { result = "TypeTemplateParameter" } |
1706 | | - |
1707 | | - override predicate involvesTemplateParameter() { any() } |
1708 | | -} |
1709 | | - |
1710 | | -/** |
1711 | | - * A C++ template template parameter. |
1712 | | - * |
1713 | | - * In the example below, `T` is a template template parameter (although its name |
1714 | | - * may be omitted): |
1715 | | - * ``` |
1716 | | - * template <template <typename T> class Container, class Elem> |
1717 | | - * void foo(const Container<Elem> &value) { } |
1718 | | - * ``` |
1719 | | - */ |
1720 | | -class TemplateTemplateParameter extends TypeTemplateParameter { |
1721 | | - TemplateTemplateParameter() { usertypes(underlyingElement(this), _, 8) } |
1722 | | - |
1723 | | - override string getAPrimaryQlClass() { result = "TemplateTemplateParameter" } |
1724 | | -} |
1725 | | - |
1726 | | -/** |
1727 | | - * A type representing the use of the C++11 `auto` keyword. |
1728 | | - * ``` |
1729 | | - * auto val = some_typed_expr(); |
1730 | | - * ``` |
1731 | | - */ |
1732 | | -class AutoType extends TypeTemplateParameter { |
1733 | | - AutoType() { usertypes(underlyingElement(this), "auto", 7) } |
1734 | | - |
1735 | | - override string getAPrimaryQlClass() { result = "AutoType" } |
1736 | | - |
1737 | | - override Location getLocation() { |
1738 | | - suppressUnusedThis(this) and |
1739 | | - result instanceof UnknownDefaultLocation |
1740 | | - } |
1741 | | -} |
1742 | | - |
1743 | | -private predicate suppressUnusedThis(Type t) { any() } |
1744 | | - |
1745 | 1667 | /** |
1746 | 1668 | * A source code location referring to a user-defined type. |
1747 | 1669 | * |
|
0 commit comments