C++ Logo

std-proposals

Advanced search

[std-proposals] about incrementing a pointer of a type with pure virtual function

From: Julien Allali <julien.allali_at_[hidden]>
Date: Fri, 20 Jan 2023 07:55:55 +0100
Hi everyone,

I checked the following code from one of my student:

class I{
public:
   virtual ~I(){}
   virtual void print(){
     printf("hello %p\n",this);
   }
   virtual void f()=0;
};

class B : public virtual I{
   int i,j;
public:
   ~B(){}
   virtual void f(){
     printf("B %p\n",this);
   }
};


void f(I *i){
   for(int j=0;j<5;++j)
     {
       i->print();
       i->f();
       printf("i=%p ",i);
       i++; // PROBLEM IS HERE
       printf(" => %p \n",i);
     }
}

int main(){
   B b[]={B(),B()};
   printf("B: %p %p\n",b,b+1);
   f(b);
}

As you can see, I is a non instantiable type as it has one pure virtual
method. My concern is about the line "i++": I believed it will lead to
an error or at least a warning (g++ 11.3.0)... Indeed, I can not imagine
a valid case where doing arithmetic on a pointer of a type with pure
virtual function can be valid.... Shouldn't the standard forbid such
arithmetic?

Julien.

Received on 2023-01-20 06:55:59