Полагаю, главный вопрос сейчас заключается в том, тестируете ли вы этот код или компилятор на этом этапе?
Тестирование компилятора не обязательно является плохой вещью ... В прошлом у меня были обновления маскировки ошибок компилятора, поэтому было бы неплохо убедиться, что вы получаете тот же набор проверок безопасности, который вы ожидаете.
Тем не менее, вам придется много работать. Ваш модульный тест должен будет порождать компилятор, захватывать его выходные данные и анализировать его для правильного определения ошибки в правильной строке. Это не тривиально и, возможно, не стоит.
Немного более простой подход может заключаться в том, чтобы хранить каталог с плохим кодом и иметь скрипт, компилирующий каждый файл по одному. Имейте флаг '#ifdef MAKEFAIL', который включает точное условие, которое должно произойти. Убедитесь, что компилятор возвращает 0, если вы не устанавливаете этот флаг, и ненулевой, когда вы делаете. Это предполагает, что компилятор возвращает ненулевое значение при ошибке ... Я не знаю, следует ли MSVC этому правилу.
Третий вариант, который я выброшу для решения переносимости, это autoconf. Это может быть неудобно для установки, но часть его цели состояла в том, чтобы гарантировать, что у вас есть нормальная среда разработки перед компиляцией. Вы могли бы добавить в него такой тест, который позволил бы найти компилятор и попробовать его.