<div dir="auto"><div data-smartmail="gmail_signature" dir="auto"><br></div><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">вт, 21 мая 2019 г., 11:32 Mutz, Marc via Development <<a href="mailto:development@qt-project.org" target="_blank" rel="noreferrer">development@qt-project.org</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">And while the partially-formed <br>
state can be extended to non-pimpled classes easily:<br>
<br>
     class QRect {<br>
        int x, y, w, h;<br>
     public:<br>
        QRect() = default;<br>
     };<br>
     QRect r; // partially-formed<br>
     r.x();   // compilers _already_ warn about this<br>
     QRect r = {}; // zero-initialized<br>
<br>That <br>
should be modelled by optional<QRect>, not by QRect itself.<br></blockquote></div><div dir="auto"><br></div><div dir="auto">Whilst the statement feels reasonable, this will require tons of API changes and double checks on the user side:</div><div dir="auto"><br></div><div dir="auto">optional<QRect> Item::childrenRect() const</div><div dir="auto">{</div><div dir="auto">    if (hasChildren()) {</div><div dir="auto">        QRect r = {};</div><div dir="auto">        for (auto *child : children())</div><div dir="auto">            r.unite(child->boundingRect().value_or({});</div><div dir="auto">        return r;</div><div dir="auto">    }</div><div dir="auto">    return nullopt;</div><div dir="auto">}</div><div dir="auto"><br></div><div dir="auto">QRect r = item-><span style="font-family:sans-serif">boundingRect().</span><span style="font-family:sans-serif">value_or({});</span></div><div dir="auto"><span style="font-family:sans-serif">if (!r.isEmpty())</span></div><div dir="auto"><span style="font-family:sans-serif">    ~~~</span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif">Note that I'm ok with that, but should we enforce such a huge efforts all over Qt API just for making the default-constructible QRect a no-op?</span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif">Konstantin</span></div></div>