struct Base {
virtual void foo() = 0;
};
struct Derived : Base {
void foo() override{};
};
struct Thing {
Thing(Base *b)
: b(b) {}
Base *b;
void call_foo() const {
b->foo(); //why do I not get an error? b is const and should not be able to call Base::foo
}
};
int main() {
Derived d;
const Thing t(&d);
t.call_foo();
const Base *b = &d;
//b->foo(); //this correctly says error: passing 'const Base' as 'this' argument discards qualifiers [-fpermissive]
}
c3RydWN0IEJhc2UgewoJdmlydHVhbCB2b2lkIGZvbygpID0gMDsKfTsKCnN0cnVjdCBEZXJpdmVkIDogQmFzZSB7Cgl2b2lkIGZvbygpIG92ZXJyaWRle307Cn07CgpzdHJ1Y3QgVGhpbmcgewoJVGhpbmcoQmFzZSAqYikKCQk6IGIoYikge30KCUJhc2UgKmI7Cgl2b2lkIGNhbGxfZm9vKCkgY29uc3QgewoJCWItPmZvbygpOyAvL3doeSBkbyBJIG5vdCBnZXQgYW4gZXJyb3I/IGIgaXMgY29uc3QgYW5kIHNob3VsZCBub3QgYmUgYWJsZSB0byBjYWxsIEJhc2U6OmZvbwoJfQp9OwoKaW50IG1haW4oKSB7CglEZXJpdmVkIGQ7Cgljb25zdCBUaGluZyB0KCZkKTsKCXQuY2FsbF9mb28oKTsKCgljb25zdCBCYXNlICpiID0gJmQ7CgkvL2ItPmZvbygpOyAvL3RoaXMgY29ycmVjdGx5IHNheXMgZXJyb3I6IHBhc3NpbmcgJ2NvbnN0IEJhc2UnIGFzICd0aGlzJyBhcmd1bWVudCBkaXNjYXJkcyBxdWFsaWZpZXJzIFstZnBlcm1pc3NpdmVdCn0K