Class Symbol

A program element which can be the target of inter-function or inter-file dependencies.

This is the union of Declaration, DeclarationEntry and Macro, minus various kinds of declaration:

  • FriendDecl is not included, as a friend declaration cannot be the target of a dependency (nor, as it happens, can they be a source).
  • TemplateParameter and related UserTypes are not included, as they are intrinsic sub-components of their associated template.
  • Template instantiations are excluded, as the template itself is more useful as a dependency target.
  • Stack variables and local types are excluded, as they are lexically tied to their enclosing function, and intra-function dependencies can only be inter-file dependencies in pathological cases.
  • Builtin functions and macros are excluded, as dependencies on them do not translate to inter-file dependencies (note that static functions and declarations within anonymous namespaces cannot be excluded for this reason, as the declaration can be in a header).
  • DeclarationEntrys are only needed if they’re not definitions, for the definition to declaration dependency.

Import path

import semmle.code.cpp.commons.Dependency

Direct supertypes

Indirect supertypes



Gets an element which depends upon this symbol.

Inherited predicates


Gets the source of this element: either itself or a macro that expanded to this element.

from Element

Holds if this element may be from a library.

from Element

Holds if this element may be from source.

from Element

Canonical QL class corresponding to this element.

from ElementBase

Gets the closest Element enclosing this one.

from Element

Gets the primary file where this element occurs.

from Element

Gets the primary location of this element.

from Element

Gets the parent scope of this Element, if any. A scope is a Type (Class / Enum), a Namespace, a Block, a Function, or certain kinds of Statement.

from Element

Holds if this element is affected in any way by a macro. All elements that are totally or partially generated by a macro are included, so this is a super-set of isInMacroExpansion.

from Element

Holds if this Element is a part of a template instantiation (but not the template itself).

from Element

Holds if this Element is part of a template template (not if it is part of an instantiation of template). This means it is represented in the database purely as syntax and without guarantees on the presence or correctness of type-based operations such as implicit conversions.

from Element

Holds if this element comes from a macro expansion. Only elements that are entirely generated by a macro are included - for elements that partially come from a macro, see isAffectedByMacro.

from Element

Gets a textual representation of this element.

from ElementBase