Re: C++11 move constructors
- From: Kjell Ahlstedt <kjell ahlstedt bredband net>
- To: gtkmm-list gnome org
- Subject: Re: C++11 move constructors
- Date: Mon, 26 Nov 2012 09:32:02 +0100
2012-11-24 12:13, Chow Loong Jin skrev:
On 24/11/2012 04:13, Murray Cumming wrote:
On Fri, 2012-11-23 at 14:50 -0500, Tristan Matthews wrote:
2012/11/23 Murray Cumming <murrayc murrayc com>:
Maybe we could add C++11 move constructors to the gtkmm classes, where appropriate, inside ifdefs to prevent them from breaking the build when C++11 is not enabled/supported by the compiler.
How would you test for C++11? An AC_COMPILE_IFELSE test that builds a
class with a move constructor?
Yes, I think that would be best.
I think we should still have it disabled by default in the public headers, and
opt-in using a macro that users can define manually.
The reason for this is that move constructors will end up in public headers, and
will break compilations in applications that are not compiled with -std=c++(0x|11).
Move constructors will probably end up both in public headers and in
gtkmm's .cc files. If not all move constructors are inline or template,
i.e. only in header files, a configure-time check is necessary. If gtkmm
is configured and built without C++11 functionality (e.g. with gcc
without -std=c++11), move constructors can't safely be enabled when an
application program is compiled. The libgtkmm-3.0 library file will lack
some necessary code. And you can't guarantee that a function is inlined.
The 'inline' keyword is only a hint for the compiler, which it's not
force to obey.
It would probably be possible to build gtkmm with C++11 functionality
and then build an application without, if the move constructors in the
header files are preceded by something like
#if GTKMM_CAN_USE_MOVE_CONSTRUCTORS && (__cplusplus >= 201103L ||
defined(__GXX_EXPERIMENTAL_CXX0X__))
where GTKMM_CAN_USE_MOVE_CONSTRUCTORS is defined in gtkmmconfig.h.
In the libsigc++ bug https://bugzilla.gnome.org/show_bug.cgi?id=672555 I
have argued against using a configure-time check for checking if the
compiler accepts the 'decltype' C++11 keyword, but that's another case.
'decltype' is not needed when libsigc++ is built. It's only needed in
some application programs.
Kjell
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]