Ocorreu algo estranho ao fazer algum modelo de metaprogramação no outro dia. Basicamente, tudo se resume a essa afirmação que não (como eu esperaria) passar.
static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>);
No começo, pensei que estava cometendo um erro sintático ao definir uma referência de função, mas essa afirmação passa, mostrando que esse não é o caso.
static_assert(std::is_same_v<void()&, void()&>);
Também tentei remove_reference
me implementar copiando a fonte da cppreference, mas isso também não funcionou. O que está acontecendo aqui?
O tipo que você possui não é uma referência a uma função, mas uma função com um qualificador de referência .
fonte