@Trauma A mi también, pero lo que no me gusta es que ocultan los constructos reales que hay detrás ¿Por qué inventarse una sintaxis nueva con incluso palabras clave y colarlas detrás de "magia del compilador" pudiendo publicar una cabecera con funciones que hacen lo mismo?
@Trauma Opino que estoy más perdido que el melocotón del interferómetro.
A ver, me cuesta entender el código, pero en el error se queja de que falta un operador paréntesis: error: no match for call to '(tu tipo de datos) ()'
Si lo añades el error cambia, pero ahora tengo que mirar otra cosa del curro :(
El enable_if es un mecanismo para explotar la característica de SFINAE (substitution failure is not an error), falla la substitución de parámetros en la primera versión entonces toda esa función deja de existir en esa instancia, así que lo único que puede tragar un parámetro de tipo HANDLER es la función rvr.
He quitado la negación del enable_if en la versión rvr
De esa manera ambas versiones de la función se instancian cuando is_same se cumple pero se escoge la primera porque cr se ajusta al parámetro recibido mejor que rvr.
A ver, todas las versiones (de un sólo parámetro) de connect reciben un HANDLER, el cuál quieres que sea (is_same) un class Signal<…>. ¿Cuántos punteros a función pueden ser un class Signal<…>?