Hello, Il 21/10/18 16:15, Elvis Stansvik ha scritto:
I couldn't find a way to contact them.
The best shot would be the std-discussion mailing list, I think.
In order to try out the unsafe usage you suggested in your other mail, and also another unsafe usage pointed out in an SO question (https://stackoverflow.com/questions/39051460/why-does-as-const-forbid-rvalue-arguments/39051612#39051612), I made the following test program. The output when running is: [estan@newton move-to-const-test]$ ./move-to-const-test without moveToConst: FooPrivate constr from vector Foo constr with arg 0x7fffdb627200 Foo begin 0x7fffdb627200 Foo end 0x7fffdb627200 Foo destr 0x7fffdb627200 FooPrivate destr with moveToConst: FooPrivate constr from vector Foo constr with arg 0x7fffdb627208 Foo move constr 0x7fffdb627210 Foo destr 0x7fffdb627208 Foo begin const 0x7fffdb627210 Foo end const 0x7fffdb627210 Foo destr 0x7fffdb627210 FooPrivate destr [estan@newton move-to-const-test]$ Which just shows it's working as intended.
However the third test should be a without moveToConst, but storing in a temporary, i.e. the current best practice. It should output exactly like the first one, but of course call const begin/end.
And note the extra move/destruciton in the second example.
The two unsafe usages are commented out, because they wouldn't compile (good!).
Whops, you're absolutely right. My bad. With your proposed implementation:
template <typename T> const T moveToConst(T &&t) { return std::move(t); }
This won't compile when called on a non-const lvalue (the return type will be a lvalue reference to const, which won't bind to a non-const rvalue). I stand corrected.
Which actually makes me think of yet another possibility of misuse, that is, applying moveToConst to a function returning a const object. That will compile, using a copy...
const QVector<Obj> getVector(); for (auto &obj : moveToConst(getVector()) ~~~
Long story short, I think it's good if we stay away from this in Qt. Clazy warns you if you "do it wrong", and being a Qt-specific problem, we better not offer too many ways that could have unpleasant drawbacks.
My 2 c, -- Giuseppe D'Angelo | giuseppe.dang...@kdab.com | Senior Software Engineer KDAB (France) S.A.S., a KDAB Group company Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com KDAB - The Qt, C++ and OpenGL Experts
smime.p7s
Description: Firma crittografica S/MIME
_______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development