I didn't fully catch your reasoning regarding the call-site of functions, but if your specifically talking about function pointers, then they are not closures so call-site doesn't matter.
> Well, on second thought, is there any reason why an int function ptr should be any different from an int ptr?
I don't know any other example, but in Itanium, a function pointer is not just an address but an (address+address) pair where the second address is a sort of a base pointer for data segment:
Re:Why C++ Is Terrifying
by account4mypc on Friday April 16, 2021 @04:40PM
(#26838839)
I don't think this is true except maybe on ancient architectures. function ptrs are usually just addresses (64 bits on most modern computers). virtual member function ptrs can have an extra bit of info to resolve the this ptr at runtime.
so usually (but not always), sizeof(int ptr) == sizeof(func ptr)
I'm not super familiar with C++'s memory model, especially since they have deprecated the notion of POD and replaced it with trivially constructable.
My rudimentary thought process is that you can't just "move" raw functions because there is probably some assumptions made that a C++ function's call-site isn't going to move around if it isn't owned by an object. Otherwise, the runtime would have to deduce the location of the function call every time.
Well, on second thought, is there any reason why an int function ptr should be any different from an int ptr?
Asking as someone who has been writing C++ on-and-off for a few years for games, school, etc. but never professionally.