Il 23/05/2016 19:50, Konstantin Tokarev ha scritto:


23.05.2016, 19:25, "Giuseppe D'Angelo" <[email protected]>:
Il 23/05/2016 18:11, Konstantin Tokarev ha scritto:
  Hello,

  I've stumbled upon QPixmap having operator=(QPixmap&&) but missing 
QPixmap(QPixmap&&), however it seems like there are a lot of Qt classes in the same 
situation, for example:

[snip]

  Is there any good reason for these classes to not have move constructor, or 
is it just an unfortunate omission?

Because the implementation of a move constructor for those classes
requires the private class to be defined in the public header, but all
those classes are pimpl'd, so by definition you don't have that private
class available.

Copy constructors are not defined in headers, so  don't see any reason for
move constructors to be inline. And if those move constructors are defined in
.cpp files, it should not be needed to include private headers into public.

Unfortunately, that was not the case before 5.7, as we
1) could not require C++11;
2) Qt claimed binary compatibility between any combination of

application compiled with/without C++11
x
Qt compiled with/without C++11.

The problem was that an application compiled with C++11 against a C++11 Qt would use the move operations _exported_ by Qt, but then the same application could not run against a C++98 build of Qt (which would not export them). (*)

For this reason, some C++11-only bits of Qt (such the move assignment) was implemented as an inline function in the header, which then causes the problem with the private class not being defined at that point.

Since 5.7 Qt started requiring C++11, so we can implement move constructors too (out of line); I think we require move operations to be fully working, otherwise we go back to the pre-5.7 status, but I can't find the feature whitelist document right now.

Any takers for the task? :)



(*) I'm personally against this kind of "stretched" definitions of binary compatibility, but that's just my personal opinion...


--
Giuseppe D'Angelo | [email protected] | Senior Software Engineer
KDAB (UK) Ltd., a KDAB Group company | Tel: UK +44-1625-809908
KDAB - The Qt Experts

Attachment: smime.p7s
Description: Firma crittografica S/MIME

_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to