While debugging with gdb, printing the vtable yields something like the following:
(gdb) info vtbl *object
vtable for 'my_namespace_B::MyDerivedObject' @ 0x555555690bf0 (subobject @ 0x5555556ab710):
[0]: 0x55555559ff42 <my_namespace_A::MyBaseObject::function1[abi:cxx11]() const>
[1]: 0x5555555a016c <my_namespace_A::MyBaseObject::function2[abi:cxx11]() const>
[2]: 0x5555555a030a <my_namespace_A::MyBaseObject::function3() const>
[5]: 0x5555555a47f8 <my_namespace_B::MyDerivedObject::~MyDerivedObject()>
[6]: 0x5555555a4846 <my_namespace_B::MyDerivedObject::~MyDerivedObject()>
[7]: 0x5555555a0a80 <my_namespace_B::MyDerivedObject::fun1(bool)>
What does the [abi:cxx11] part mean?
I understand that this should mean that that part of the code was compiled using cxx11 features.
- is this understanding even correct?
- What implications might this have?
- Could this be the reason why calling the virtual function
fun1from withinBaseObject::nonVirtualMemberFunctionyields undefined behavior?