That is either very implementation or operating system dependent (so perhaps no fit for the standard library) or has to be defined in terms of C++.
Perhaps define a template<T>, which signifies that an object of type template<T> is
- containing a T as sub-object
- const and const_casting the const away is UB, mutable attributes are not allowed or cannot be modfiied without UB
- constructed at compile-time, that is even stricter than constinit, never destructed
then the notion of read-only is inside the type system
Another option would be to ask about a memory pool or allocator.
With std::is_read_only_memory you would also have to check each byte of the object. I think there is no guarantee in C++ that an object is either fully in RO space or fully in RW space.
-----Ursprüngliche Nachricht-----
Von: Frederick Virchanza Gotham via Std-Proposals <std-proposals@lists.isocpp.org>
Gesendet: Mi 01.04.2026 13:49
Betreff: [std-proposals] std::is_read_only_memory
An: std-proposals <std-proposals@lists.isocpp.org>;
CC: Frederick Virchanza Gotham <cauldwell.thomas@gmail.com>;
On a microcontroller that has non-volatile Flash from 0x200 to 0x7FFF, and which has volatile SRAM from 0x8000 to 0x10000, the implementation would be simple:constexpr bool is_read_only_memory( void const *const begin, void const *const end ) noexcept{return begin >= 0x200 && end < 0x8000;}For a desktop PC program, it would be a little more complicated, for instance on Linux I would expect this to return 'true' for pages of memory that contain the ".rodata" section in the ELF file. Of course "is_read_only_memory" should not be used in scenarios where you will be editing page permissions, or where you write to a microcontroller's Flash at runtime.The purpose of this function would be to optimise initialisation and copying. For instance if we have a class similar to 'std::string', and if we copy it, there's actually no need to allocate memory and copy the buffer contents -- the new string object can simply refer to the original buffer.Of course for a desktop PC program, there might have to be a setup routine that keeps track of read-only pages every time "dlopen" or "LoadLibrary" is invoked.So the constructor of a string class might become something like:string::string(char const *const p) noexcept{if ( std::is_read_only_memory( p, p + strlen(p) + 1 ) ){this->addr = p;}else{this->addr = new char[ strlen(p) + 1 ];strcpy( this->addr, p );}}-- Std-Proposals mailing list Std-Proposals@lists.isocpp.org https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals