A copy constructor shall be declared for classes that contain pointers to data items

// NameDeclarator [ isPointer() ] [ $ptr_dcl := getParent() ] [ ancestor::ClassType [ getSemanticInfo() = $ptr_dcl ] [ not descendant::NameDeclarator [ isCopyConstructor() ] ] ]

1   class Matrix {
2       Matrix()
3       Matrix & operator = (const Matrix & other)
4       Matrix (Matrix &other)
5       private:
6       int *p;
7       int x[];
8   };
9   
10  class X {
11      X()
12      private:
13      int *p; // MATCHES
14      int x[];
15  };
16  
17  class Y {
18      Y()
19      Y & operator = (const Y & other)
20      private:
21      int *p; // MATCHES (2)
22      int x[];
23  };