C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Replace an object -- but retain old object if new object fails to construct

From: Frederick Virchanza Gotham <cauldwell.thomas_at_[hidden]>
Date: Fri, 24 Oct 2025 11:57:50 +0000
On Friday, October 24, 2025, Frederick Virchanza Gotham wrote:

>
>
> You could get this on a microcontroller too, where addresses above 0x2000
> are volatile memory, and addresses from 0x0 to 0x800 are the input into a
> digital-to-analog converter.
>
> And so if the 'replace' template function were to be added to the C++
> Standard library, then some classes would need to be given a tag to
> indicate that you can't put them into temporary cryostasis, something like:
>
> namespace std {
> class mutex {
> public:
> typedef int no_cryostasis;
> };
> }
>



And actually, a class could provide its own implementation of 'replace',
something like:

 namespace std {
    class mutex {
    public:
        void _Replace(void)
        {
            . . .
        }
    };
}

and then the Standard library 'replace' function could be written something
like:

template<typename T, typename... Params>
void replace(T *const p, Params&&... args)
{
    if constexpr ( requires { p->_Replace(); } )
    {
        p->_Replace( forward<Params>(args)... );
    }
    else
    {
        . . .
    }
}

But also we might need to talk about replacing an object with an object of
a different type, such as when working with std::variant.

Received on 2025-10-24 11:57:52