Hello,
I am having problem with compilation of the following code:
class ExampleClass {
public:
int f (int i, double d, char c);
int g (int i, double d, char c, char * s);
};
int ExampleClass::f (int i, double d, char c) {
std::cout << "Executing ExampleClass::f." << std::endl;
return (0);
}
int ExampleClass::g (int i, double d, char c, char * s) {
std::cout << "Executing ExampleClass::g." << std::endl;
return (0);
}
typedef sigc::slot<int, int, double, char, char *> gslot;
int bar (gslot & gs) { // The argument is a reference
std::cout << "Executing bar." << std::endl;
gs(0, 1.0, 'c', "hello");
return (0);
}
int bar2 (gslot gs) { // The reference is missing here
std::cout << "Executing bar2." << std::endl;
gs(0, 1.0, 'c', "hello");
return (0);
}
int foo () {
ExampleClass ec;
gslot intermediate = sigc::hide(sigc::mem_fun(ec, &ExampleClass::f));
bar(intermediate); // works
bar(sigc::hide(sigc::mem_fun(ec, &ExampleClass::f))); // <-- COMPILE
ERROR
bar2(sigc::hide(sigc::mem_fun(ec, &ExampleClass::f))); // works
return (0);
}
On my system with:
gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.3)
sigc++-2.0 version 2.2.3
I get this compile error:
error: invalid initialization of non-const reference of type ‘gslot&’ from a
temporary of type ‘sigc::hide_functor<-0x00000000000000001,
sigc::bound_mem_functor3<int, ExampleClass, int, double, char> >’
error: in passing argument 1 of ‘int bar(gslot&)’
This is interesting, because when I use an intermediate variable of the type
sigc::slot to which I at first assign the created functor, then the parameter
is passed successfully. Also, when I use a function (bar2) which is not taking
a reference to sigc::slot, but just a sigc::slot as a parameter, then I am able
to call it with the created functor directly.
I don't really understand this behaviour. What is the difference between calls
to bar and bar2? Why is it not possible to initialize a parameter of type
'reference to sigc::slot' with a functor returned by sigc::hide directly? Why
it is necessary to use intermediate sigc::slot? Should not be such a conversion
automatic?
Thank you very much!
_________________________________________________________________
Drag n’ drop—Get easy photo sharing with Windows Live™ Photos.
http://www.microsoft.com/windows/windowslive/products/photos.aspx
_______________________________________________
libsigc-list mailing list
libsigc-list@gnome.org
http://mail.gnome.org/mailman/listinfo/libsigc-list