Предположим, что при выполнении конструктора класса S
представляется, что S
можно построить с использованием другого конструктора. Одним из решений может быть сделать размещения нового в this
для повторного хранения:
struct S{
unsigned int j; //no const neither reference non static members
S(unsigned int i){/*...*/}
S(int i){
if (i>=0) {
new (this) S(static_cast<unsigned int>(i));
return;}
/*...*/
}
};
int i=10;
S x{i};//is it UB?
Повторное использование хранилища определено в [basic.life]. Я не знаю, как читать этот раздел, когда хранилище (re) используется во время выполнения конструктора.