При синтаксической проверке доступа к подписке с помощью расширения пакета параметров я ожидаю, что следующий код будет работать без каких-либо ошибок. Однако MSVC отклоняет как синтаксис ограничения в предложении require, так и последнее утверждение.
template
concept c = requires(T t, Ts... ts) {
{ t[ts...] } noexcept; // clang ok, gcc ok, msvc nope
};
static_assert(not c); // all ok
static_assert(not c); // all ok
static_assert(c); // clang ok, gcc ok, msvc nope
Это просто ошибка компилятора MSVC? Какое правило стандарта C++23 определяет этот код как законный?
Демо
Сообщение об ошибке MSVC :
(3): error C2760: syntax error: 'noexcept' was unexpected here; expected ';'
(3): error C2760: syntax error: ']' was unexpected here; expected '}'
(8): error C2607: static assertion failed
(8): note: the concept 'c' evaluated to false
Подробнее здесь: https://stackoverflow.com/questions/790 ... -expansion