Код: Выделить всё
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