Натрапив на щось дивне, коли днями робив якусь метапрограмування шаблонів. Це в основному зводиться до цього твердження не (як я б очікував) ухваленням.
static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>);
Спочатку я думав, що роблю синтаксичну помилку, визначаючи посилання на функцію, але це твердження проходить, показуючи, що це не так.
static_assert(std::is_same_v<void()&, void()&>);
Я також спробував реалізувати remove_reference
себе, копіюючи джерело з cppreference, але це не спрацювало. Що тут відбувається?