Date: Sun, 27 Oct 2024 22:10:22 +0100
That was legal C++, it was retroactively made UB on purpose a year ago (as far as I understand):
https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#315
https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2823
-----Ursprüngliche Nachricht-----
Von:Frederick Virchanza Gotham via Std-Proposals <std-proposals_at_[hidden]>
Gesendet:So 27.10.2024 21:16
Betreff:[std-proposals] Calling methods on a nullptr
An:std-proposals <std-proposals_at_[hidden]>;
CC:Frederick Virchanza Gotham <cauldwell.thomas_at_[hidden]>;
This is a totally half-baked idea, but I just want to float it here
sort of like a thought experiment to see if anyone is intrigued by the
possibilities it could open up.
C++ could potentially allow the invocation of a method on a nullptr.
For example:
class MyClass {
string name;
public:
string GetName(void)
{
if ( nullptr == this ) return {};
return this->name;
}
};
It gets a little more complicated if the method is virtual, for example:
class MyClass {
string name;
public:
virtual string GetName(void)
{
if ( nullptr == this ) return {};
return this->name;
}
};
Because if we supply the following standalone function to an x86_64
compiler on Linux:
string Monkey(MyClass *const p)
{
return p->GetName();
}
It will give us back something like:
mov r11, rdi # Put the object pointer in R11
mov r11, [r11] # Put the address of the VTable in R11
mov r11, [r11] # Put the address of the first method in R11
jmp r11
This of course will segfault the first time it dereferences R11
because it's a nullptr.
But if we were to mark the class as nullptr-friendly:
class MyClass friend nullptr {
string name;
public:
virtual string GetName(void)
{
if ( nullptr == this ) return {};
return this->name;
}
};
Then our 'Monkey' function would then know to check first whether 'p'
is a nullptr, and if it is a nullptr, then instead of dereferencing
'p' to find a VTable pointer, it instead just uses the VTable of
MyClass.
So it could be possible in the future in C++ to accommodate the
invocation of a method on a nullptr.
--
Std-Proposals mailing list
Std-Proposals_at_[hidden]
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
Received on 2024-10-27 21:10:46