Mi sono imbattuto in qualcosa di strano quando ho fatto un modello di metaprogrammazione l'altro giorno. Fondamentalmente si riduce a questa affermazione non (come mi aspetterei) che passi.
static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>);
All'inizio pensavo di commettere un errore sintattico nel definire un riferimento di funzione, ma questa affermazione passa, dimostrando che non è così.
static_assert(std::is_same_v<void()&, void()&>);
Ho anche provato a implementarmi remove_reference
copiando l'origine da cppreference ma non ha funzionato neanche. Cosa sta succedendo qui?