在const_cast之后修改const构造对象是UB(我相信由于不断传播).即使与std::launder(AFAIK阻止某些优化,例如const传播)相结合,它仍然是UB 吗?
#include <new>
#include <iostream>
struct C
{
int i;
};
int main(const int argc, const char * const * const argv)
{
const C c{1};
auto x = std::launder(const_cast<C*>(&c));
++x->i;
std::cout << x->i << std::endl;
std::cout << c.i << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)