Требуется выражение с локальным параметром типа void.C++

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

Сообщение Anonymous »

Выражение require может вводить локальные параметры, используя список параметров. Если какой-либо из этих параметров имеет тип void, выдаст ли выражение require false или это будет серьезная ошибка компиляции?
Рассмотрим пример №1:
Рассмотрим пример №1: р>

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

template
concept C = requires(T t, void v) {
t;
};

static_assert(!C);
который принимается как Clang, так и MSVC, но GCC жалуется

ошибка: недопустимое использование типа 'void' в объявлении параметра

Интернет-демо: https://gcc.godbolt.org/z/voMajE4K3
Короче пример №2:

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

static_assert( requires(int t, void) {t;} );
снова принимается Clang, где require возвращает true. GCC выдает ту же ошибку. И MSVC теперь печатает:

ошибка C2860: «void» нельзя использовать в качестве параметра функции, за исключением «(void)»

Онлайн-демонстрация: https://gcc.godbolt.org/z/eYbM49d7E
Какой компилятор верен в обоих примерах выше?
Онлайн-демо: https://gcc.godbolt.org/z/eYbM49d7E
Какой компилятор верен в обоих примерах выше?
п>

Подробнее здесь: https://stackoverflow.com/questions/790 ... -void-type

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