@@ -8,7 +8,22 @@ private import semmle.code.cpp.internal.ResolveClass
88 * A class type [N4140 9].
99 *
1010 * While this does include types declared with the `class` keyword, it also
11- * includes types declared with the `struct` and `union` keywords.
11+ * includes types declared with the `struct` and `union` keywords. For example:
12+ * ```
13+ * class MyClass {
14+ * public:
15+ * MyClass();
16+ * };
17+ *
18+ * struct MyStruct {
19+ * int x, y, z;
20+ * };
21+ *
22+ * union MyUnion {
23+ * int i;
24+ * float f;
25+ * };
26+ * ```
1227 */
1328class Class extends UserType {
1429 Class ( ) {
@@ -818,7 +833,16 @@ class ClassDerivation extends Locatable, @derivation {
818833 }
819834}
820835
821- /** A class that is directly enclosed by a function. */
836+ /**
837+ * A class that is directly enclosed by a function. For example the `struct` in
838+ * the following code is a `LocalClass`:
839+ * ```
840+ * void myFunction()
841+ * {
842+ * struct { int x; int y; } vec = { 1, 2 };
843+ * };
844+ * ```
845+ */
822846class LocalClass extends Class {
823847 LocalClass ( ) {
824848 isLocal ( )
@@ -833,7 +857,18 @@ class LocalClass extends Class {
833857}
834858
835859/**
836- * A nested class [4140 9.7].
860+ * A nested class [4140 9.7]. For example the struct `PairT` in the following
861+ * code is a nested class:
862+ * ```
863+ * template<class T>
864+ * class MyTemplateClass
865+ * {
866+ * public:
867+ * struct PairT {
868+ * T first, second;
869+ * };
870+ * };
871+ * ```
837872 */
838873class NestedClass extends Class {
839874 NestedClass ( ) {
@@ -867,8 +902,16 @@ class AbstractClass extends Class {
867902}
868903
869904/**
870- * A class template. (This class also finds partial specializations
871- * of class templates).
905+ * A class template (this class also finds partial specializations
906+ * of class templates). For example in the following code there is a
907+ * `MyTemplateClass<T>` template:
908+ * ```
909+ * template<class T>
910+ * class MyTemplateClass
911+ * {
912+ * ...
913+ * };
914+ * ```
872915 */
873916class TemplateClass extends Class {
874917 TemplateClass ( ) { usertypes ( underlyingElement ( this ) , _, 6 ) }
@@ -881,7 +924,17 @@ class TemplateClass extends Class {
881924}
882925
883926/**
884- * A class that is an instantiation of a template.
927+ * A class that is an instantiation of a template. For example in the following
928+ * code there is a `MyTemplateClass<int>` instantiation:
929+ * ```
930+ * template<class T>
931+ * class MyTemplateClass
932+ * {
933+ * ...
934+ * };
935+ *
936+ * MyTemplateClass<int> instance;
937+ * ```
885938 */
886939class ClassTemplateInstantiation extends Class {
887940 TemplateClass tc ;
@@ -895,15 +948,16 @@ class ClassTemplateInstantiation extends Class {
895948 /**
896949 * Gets the class template from which this instantiation was instantiated.
897950 *
898- * Example : For `std::vector<float>`, returns `std::vector<T>`.
951+ * For example : For `std::vector<float>`, the result is `std::vector<T>`.
899952 */
900953 TemplateClass getTemplate ( ) {
901954 result = tc
902955 }
903956}
904957
905958/**
906- * A specialization of a class template.
959+ * A specialization of a class template (this may be a full or partial template
960+ * specialization).
907961 */
908962abstract class ClassTemplateSpecialization extends Class {
909963 /**
@@ -928,7 +982,14 @@ abstract class ClassTemplateSpecialization extends Class {
928982}
929983
930984/**
931- * A full specialization of a class template.
985+ * A full specialization of a class template. For example:
986+ * ```
987+ * template<>
988+ * class MyTemplateClass<int>
989+ * {
990+ * ...
991+ * };
992+ * ```
932993 */
933994class FullClassTemplateSpecialization extends ClassTemplateSpecialization {
934995 FullClassTemplateSpecialization ( ) {
@@ -947,7 +1008,14 @@ class FullClassTemplateSpecialization extends ClassTemplateSpecialization {
9471008}
9481009
9491010/**
950- * A partial specialization of a class template.
1011+ * A partial specialization of a class template. For example:
1012+ * ```
1013+ * template<class T>
1014+ * class MyTemplateClass<int, T>
1015+ * {
1016+ * ...
1017+ * };
1018+ * ```
9511019 */
9521020class PartialClassTemplateSpecialization extends ClassTemplateSpecialization {
9531021 PartialClassTemplateSpecialization ( ) {
@@ -973,8 +1041,17 @@ class PartialClassTemplateSpecialization extends ClassTemplateSpecialization {
9731041}
9741042
9751043/**
976- * An "interface", in other words a class that only contains pure virtual
977- * functions.
1044+ * An "interface" is a class that only contains pure virtual functions (and contains
1045+ * at least one such function). For example:
1046+ * ```
1047+ * class MyInterfaceClass
1048+ * {
1049+ * public:
1050+ * virtual void myMethod1() = 0;
1051+ * virtual void myMethod2() = 0;
1052+ * };
1053+ * ```
1054+ *
9781055 */
9791056class Interface extends Class {
9801057 Interface ( ) {
@@ -985,8 +1062,14 @@ class Interface extends Class {
9851062}
9861063
9871064/**
988- * A class derivation that is virtual, for example
989- * "class X : --> virtual public Y <--."
1065+ * A class derivation that is virtual. For example the derivation in the following
1066+ * code is a `VirtualClassDerivation`:
1067+ * ```
1068+ * class MyClass : public virtual MyBaseClass
1069+ * {
1070+ * ...
1071+ * };
1072+ * ```
9901073 */
9911074class VirtualClassDerivation extends ClassDerivation {
9921075 VirtualClassDerivation ( ) {
@@ -997,7 +1080,19 @@ class VirtualClassDerivation extends ClassDerivation {
9971080}
9981081
9991082/**
1000- * A class that is the base of some virtual class derivation.
1083+ * A class that is the base of some virtual class derivation. For example
1084+ * `MyBaseClass` in the following code is a `VirtualBaseClass`:
1085+ * ```
1086+ * class MyBaseClass
1087+ * {
1088+ * ...
1089+ * };
1090+ *
1091+ * class MyClass : public virtual MyBaseClass
1092+ * {
1093+ * ...
1094+ * };
1095+ * ```
10011096 */
10021097class VirtualBaseClass extends Class {
10031098 VirtualBaseClass ( ) {
@@ -1020,10 +1115,13 @@ class VirtualBaseClass extends Class {
10201115/**
10211116 * The proxy class (where needed) associated with a template parameter, as
10221117 * in the following code:
1023- *
1024- * template < typename T>
1118+ * ```
1119+ * template < typename T>
10251120 * struct S : T // the type of this T is a proxy class
1026- * {};
1121+ * {
1122+ * ...
1123+ * };
1124+ * ```
10271125 */
10281126class ProxyClass extends UserType {
10291127 ProxyClass ( ) {
0 commit comments