Package: g++-4.4 Version: 4.4.1-4 Severity: normal cwidget doesn't compile cleanly with g++-4.4 because it violates "strict aliasing rules"; apparently they've been made stricter in 4.4? Unfortunately, the error message that g++ generates is very vague and doesn't help much in tracking it down.
The problem seems to be something to do with libsigc++: /usr/include/sigc++-2.0/sigc++/limit_reference.h: In constructor ‘cwidget::widgets::menubar::menubar(bool)’: /usr/include/sigc++-2.0/sigc++/limit_reference.h:81: error: dereferencing pointer ‘<anonymous>’ does break strict-aliasing rules /usr/include/sigc++-2.0/sigc++/limit_reference.h:81: note: initialized from here Note that this is *all* of the error message; it doesn't make it clear where the limit_reference template is instantiated from (which is a bug IMO, hence why I'm filing one). The code in question looks like this: template <class T_type> class limit_reference<T_type, true> { public: /** Constructor. * @param _A_target The reference to limit. */ limit_reference(T_type& _A_target) : visited(_A_target), invoked(_A_target) {} and it's being invoked like this: menubar::menubar(bool _always_visible) :container(), startloc(0), active(false), always_visible(_always_visible), curloc(0), subwidget(NULL) { do_layout.connect(sigc::mem_fun(*this, &menubar::layout_me)); focussed.connect(sigc::mem_fun(*this, &menubar::got_focus)); unfocussed.connect(sigc::mem_fun(*this, &menubar::lost_focus)); } I know that menubar::menubar is the culprit, because when I comment out these three lines, the error stops. It also stops if I invoke another method on menubar; not sure why, but maybe it helps: menubar::menubar(bool _always_visible) :container(), startloc(0), active(false), always_visible(_always_visible), curloc(0), subwidget(NULL) { get_active_widget(); do_layout.connect(sigc::mem_fun(*this, &menubar::layout_me)); focussed.connect(sigc::mem_fun(*this, &menubar::got_focus)); unfocussed.connect(sigc::mem_fun(*this, &menubar::lost_focus)); } It looks like maybe an intermediate value is causing some trouble and its name can't be displayed (hence <anonymous>), but I don't know what's going on. connect() and mem_fun() are invoked with pretty much the same code as above in lots of places where no error occurs, and I don't understand what I'm doing wrong (although I admit I'm not familiar with the strict aliasing rules, so I could be breaking them by accident). Any advice or help would be appreciated; this has me stumped. I apologize for not having a better example than "compile cwidget" -- I spent some time trying to reproduce this with a simpler batch of code and was entirely unsuccessful. :-( Thanks, Daniel -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: i386 (i686) Kernel: Linux 2.6.30-1-686 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages g++-4.4 depends on: ii gcc-4.4 4.4.1-4 The GNU C compiler ii gcc-4.4-base 4.4.1-4 The GNU Compiler Collection (base ii libc6 2.9-26 GNU C Library: Shared libraries ii libcloog-ppl0 0.15.7-1 the Chunky Loop Generator (runtime ii libgmp3c2 2:4.3.1+dfsg-3 Multiprecision arithmetic library ii libgmpxx4ldbl 2:4.3.1+dfsg-3 Multiprecision arithmetic library ii libmpfr1ldbl 2.4.1-2 multiple precision floating-point ii libppl-c2 0.10.2-2 Parma Polyhedra Library (C interfa ii libppl7 0.10.2-2 Parma Polyhedra Library (runtime l ii libstdc++6-4.4-dev 4.4.1-4 The GNU Standard C++ Library v3 (d g++-4.4 recommends no packages. Versions of packages g++-4.4 suggests: pn g++-4.4-multilib <none> (no description available) pn gcc-4.4-doc <none> (no description available) pn libstdc++6-4.4-dbg <none> (no description available) -- no debconf information -- To UNSUBSCRIBE, email to debian-gcc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org