Приводит ли std::is_invocable_r с void в качестве возвращаемого типа к UB?C++

Программы на C++. Форум разработчиков
Anonymous
Приводит ли std::is_invocable_r с void в качестве возвращаемого типа к UB?

Сообщение Anonymous »

Сегодня я наткнулся на странное поведение std::is_invocable_r.
Исследуя, почему это происходит, я наткнулся на этот вопрос о переполнении стека:
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);
является void, ArgType[0] тоже является void, так это неопределенное поведение в примере? Дефект, который остался незамеченным?
Или, что более вероятно, я совершенно неправильно понимаю смысл процитированной строки?

Подробнее здесь: https://stackoverflow.com/questions/797 ... lead-to-ub

Вернуться в «C++»