
The following simple program crashes with assertion failure when compiled under Solaris 11 with SunCC: Sun C++ 5.8 Patch 121018-10 2007/02/21 Assertion failed: node_algorithms::unique(to_insert), file boost/boost/intrusive/list.hpp, line 168 I'm using the latest Boost.Intrusive from CVS (snapshot taken 2007-06-03). I have tracked the problem, but I don't know wheter it's the code or compiler problem; see below the code for cause. == Begin code // Program to demonstrate a bug with SunCC and member hooks. #include <boost/intrusive/list.hpp> struct klass { void *data_klass; boost::intrusive::list_member_hook<> hook_; typedef boost::intrusive::list< boost::intrusive::list_member_hook<>::value_traits< klass, &klass::hook_>, false> list; }; static klass Gd; static klass::list Gl; int main(void) { => Gl.push_back(Gd); return 0; } == End code When the program is started, the hook's prev_ and next_ members are initialized correctly to &Gd.hook_ (0x8062dd8). The member_value_traits instance is by dbx resolved to boost::intrusive::detail::member_value_traits< klass,boost::intrusive::list_member_hook< (boost::intrusive::linking_policy)1,void*>, klass::hook_>::to_node_ptr ^^^^^^^^^^^^ Corresponds to the template P parameter. The statement MemberHookType* result = &(value.*P); sets result to 0x8062dd4 (4 bytes off from the hooks address). Finally, in push_back method, the to_insert value receives 0x8062dd4 which equals &Gd (ie. it points to the start of the object) instead of &Gd.hook_. Should this be reported as a compiler bug? BTW, I'll try using base hooks as a workaround. (PS: the code works fine with gcc4.2)