Roel Vanhout wrote: > The program below doesn't compile (at least on MSVC, the error is:
Naming a compiler without a version is almost meaningless. Also it would be nice to know that you're using sigc++ 1.x. ;) > error C2440: > 'initializing' : cannot convert from 'const Foo' to 'Foo &' > Conversion loses qualifiers > see reference to > function template instantiation > 'SigC::Slot0<R> > SigC::slot<std::string,const Foo,Foo>(O1 &,R (__thiscall Foo::* )(void) > const)' being compiled > with > [ > R=std::string, > O1=const Foo > ] > ) > > How can I connect to a slot of a const object? You can't. The point is that connecting a SigC::Object is a mutating operation on the SigC::Object underneath - your connection is registered there, so it can be automatically disconnected when the SigC::Object is destroyed. > I've tried putting > 'const' just about everywhere I could imagine but no change apart from > other error messages :) It compiles ok when I don't make the object 'f' > const. Is it possible at all? Ideas: - Use const_cast, but that invokes UB when the object is a constant, i.e. if it isn't just that you only have a const reference to it. - Use SigC::class_slot, but then you loose the automatic disconnecting and need to implement that manually - sometimes the automatic one doesn't work that good anyway so it might not be a problem. - Don't use a const object. Uli _______________________________________________ libsigc-list mailing list libsigc-list@gnome.org http://mail.gnome.org/mailman/listinfo/libsigc-list