Сталкивался с чем-то странным, когда делал шаблонное метапрограммирование на днях. Это в основном сводится к тому, что утверждение не (как я и ожидал) не прошло.
static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>);
Сначала я думал, что допустил синтаксическую ошибку при определении ссылки на функцию, но это утверждение проходит, показывая, что это не так.
static_assert(std::is_same_v<void()&, void()&>);
Я также пытался реализовать remove_reference
копирование исходного кода из cppreference, но это тоже не сработало. Что здесь происходит?
Тип, который вы имеете, - это не ссылка на функцию, а функция с квалификатором ссылки .
источник