Кажется, MSVC ошибочно принимает концептуальные ограничения [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Кажется, MSVC ошибочно принимает концептуальные ограничения [дубликат]

Сообщение Anonymous »

Следующий код не удалось скомпилировать в MSVC. Возможно, компилятор работает с ошибками? Я ожидаю, что статическое утверждение not d пройдет, поскольку x является частным членом t и, следовательно, недоступно при попытке доступа через T::x внутри концепции d.

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

namespace n { template using a = void; }

template concept c = true;
template concept d = c;

struct s { int x; };
class t : s {};

static_assert(d);
static_assert(not d); // clang ok, msvc nope
Демо

Пример кода в связанном с вопросом вопросе компилируется только с GCC, с аргументом, что нормализация выражения-ограничения предоставленной концепции имеет только пустое сопоставление параметров шаблона, что не может привести к сбою замены, тем самым благоприятствуя поведению GCC.
Однако правила, применимые к нормальная форма идентификатора концепта становится неактуальной при замене его выражением, например, шаблонной переменной типа bool. В этом случае все компиляторы оценят концепцию как неудовлетворительную.
Применяя это изменение к примеру этого вопроса, мы наблюдаем, что поведение MSVC по-прежнему отклоняется от ожидаемого. Это ясно показывает, что между этими двумя вопросами существует разная первопричина. Таким образом, этот вопрос был ошибочно помечен как дубликат и его следует открыть повторно. Игнорирование внесенных мной ранее правок или просто отказ от попыток разобраться в нюансах, связанных с этим, никому не поможет.

Подробнее здесь: https://stackoverflow.com/questions/784 ... onstraints

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