Исследуя, почему это происходит, я наткнулся на этот вопрос о переполнении стека:
is_invocable_r игнорирует возвращаемый параметр
Ответ в основном решил мою непосредственную проблему.
Однако, когда я снова читал о std::is_invocable_r в cppreference, я наткнулся на эту тревожную строку (выделено мной):
If Fn, R или любой тип в пакете параметров ArgTypes не является полным типом, (возможно, с указанием cv) void или массивом с неизвестной границей, поведение неопределенно.
Таким образом, наличие R как void не вызывает особого поведения, как предложено в вышеупомянутом ответе SO, оно вызывает неопределенное поведение вместо этого!?
Несколькими строками позже cppreference приводит пример кода с утверждением:
Код: Выделить всё
static_assert(not std::is_invocable_r_v);
Код: Выделить всё
RИли, что более вероятно, я совершенно неправильно понимаю смысл процитированной строки?
Подробнее здесь: https://stackoverflow.com/questions/797 ... lead-to-ub
Мобильная версия