Me encontré con algo extraño al hacer una metaprogramación de plantilla el otro día. Básicamente se trata de esta afirmación, no (como era de esperar) pasar.
static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>);
Al principio pensé que estaba cometiendo un error sintáctico al definir una referencia de función, pero esta afirmación pasa, mostrando que ese no es el caso.
static_assert(std::is_same_v<void()&, void()&>);
También intenté implementarme remove_reference
copiando la fuente de cppreference pero tampoco funcionó. ¿Que esta pasando aqui?
El tipo que tiene no es una referencia a una función, sino una función con un calificador de referencia .
fuente