Различия в порядке проверки ограничений между компиляторами?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Различия в порядке проверки ограничений между компиляторами?

Сообщение Anonymous »

Рассмотрим следующий код: https://gcc.godbolt.org/z/9qj15faezобразной#include
#include
#include

template
std::make_unsigned_t to_unsigned(T t)
{
return t;
}

template
concept CanMakeUnsigned = requires(const T &t){to_unsigned(t);};
static_assert(!CanMakeUnsigned);
< /code>
Это компилируется в GCC 11 и более нове и в Clang с Libc ++. Но это вызывает жесткую ошибку (в make_unsigned_t ) в MSVC, Clang с Libstdc ++ и GCC 10 и старше.
Какой компилятор правильный? Это правовой код или нет? https://gcc.godbolt.org/z/zz3kx1xxe
template concept C = sizeof(T) == 42;

template struct A
{
T *x;
};

template
A blah() {return {};}

template
concept CanBlah = requires{blah();};
static_assert(!CanBlah);


Подробнее здесь: https://stackoverflow.com/questions/794 ... -compilers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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