Требуется ли компилятор для диагностики синтаксических ошибок в шаблонах?C++

Программы на C++. Форум разработчиков
Anonymous
Требуется ли компилятор для диагностики синтаксических ошибок в шаблонах?

Сообщение Anonymous »


В [temp.res.general] есть пример, который меня смущает:

template class X { // ... пустота г(Т т) { +; // может быть диагностирован, даже если X​::​g не создан } }; Слово «может» предполагает, что компилятору разрешено диагностировать +;, однако это не обязательно. Насколько мне известно, +; не является допустимым синтаксисом C++.

Если требуется, то где формулировка, подтверждающая это? Если нет, то как далеко вы сможете зайти?

void g(T t) { +(()=/)(/)§(/)(/)/=)$§/%)=§(/&%=)§/(%)=§/%§; // требуется диагностика? }}}}}}}}}}}}}}}}}}}}}; // требуется диагностика? } Похоже, что компилятору приходится сопоставлять фигурные скобки, чтобы знать, произошла ли синтаксическая ошибка внутри шаблона или снаружи. Возникает еще два вопроса:
[*]Являются ли синтаксические ошибки просто IFNDR в целом, а не только в шаблонах? [*]Есть ли какая-либо формулировка, в которой говорится, что необходимо выполнять сопоставление фигурных скобок?

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