Допустимо ли имя типа необязательного ?C++

Программы на C++. Форум разработчиков
Anonymous
Допустимо ли имя типа необязательного ?

Сообщение Anonymous »

При изменении существующего кода я случайно обнаружил, что объявление псевдонима создает std::optional. Это произошло из следующего кода шаблона:

Код: Выделить всё

using ret_t = std::invoke_result_t;
using opt_ret_t = std::optional;
позже код различает случай, когда тип возвращаемого значения (не) void, поэтому фактический необязательный объект никогда не создается. Чтобы убедиться, что я ничего не упустил, я добавил утверждение в эту ветку кода, и все скомпилировалось:

Код: Выделить всё

static_assert(std::is_same_v);
В cppreference указано: Не существует необязательных ссылок, функций, массивов или cv void; программа является неправильной, если она создает необязательный параметр такого типа. Итак, несмотря на то, что компиляторы не жалуются, этот код неправильно сформирован?

Подробнее здесь: https://stackoverflow.com/questions/787 ... name-valid

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