Date: Fri, 20 Jan 2023 06:10:06 -0600
If you change main to
int main(int, char**) {
B b1, b2, b3, b4, b5;
A a[5];
f(a);
}
The program is well defined, and makes perfect sense. Granted it isn't modern C++, and so not worth teaching (a criticism that applies to whatever assigned caused the student to write that code in the first place. ), but it is useful if you are writing C with classes.
int main(int, char**) {
B b1, b2, b3, b4, b5;
A a[5];
f(a);
}
The program is well defined, and makes perfect sense. Granted it isn't modern C++, and so not worth teaching (a criticism that applies to whatever assigned caused the student to write that code in the first place. ), but it is useful if you are writing C with classes.
-- Henry Miller hank_at_[hidden] On Fri, Jan 20, 2023, at 00:55, Julien Allali via Std-Proposals wrote: > 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. > -- > Std-Proposals mailing list > Std-Proposals_at_[hidden] > https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
Received on 2023-01-20 12:10:28