Требуется ли компилятор для диагностики синтаксических ошибок в шаблонах? ⇐ C++
-
Anonymous
Требуется ли компилятор для диагностики синтаксических ошибок в шаблонах?
В [temp.res.general] есть пример, который меня смущает:
template class X { // ... пустота г(Т т) { +; // может быть диагностирован, даже если X::g не создан } }; Слово «может» предполагает, что компилятору разрешено диагностировать +;, однако это не обязательно. Насколько мне известно, +; не является допустимым синтаксисом C++.
Если требуется, то где формулировка, подтверждающая это? Если нет, то как далеко вы сможете зайти?
void g(T t) { +(()=/)(/)§(/)(/)/=)$§/%)=§(/&%=)§/(%)=§/%§; // требуется диагностика? }}}}}}}}}}}}}}}}}}}}}; // требуется диагностика? } Похоже, что компилятору приходится сопоставлять фигурные скобки, чтобы знать, произошла ли синтаксическая ошибка внутри шаблона или снаружи. Возникает еще два вопроса:
[*]Являются ли синтаксические ошибки просто IFNDR в целом, а не только в шаблонах? [*]Есть ли какая-либо формулировка, в которой говорится, что необходимо выполнять сопоставление фигурных скобок?
В [temp.res.general] есть пример, который меня смущает:
template class X { // ... пустота г(Т т) { +; // может быть диагностирован, даже если X::g не создан } }; Слово «может» предполагает, что компилятору разрешено диагностировать +;, однако это не обязательно. Насколько мне известно, +; не является допустимым синтаксисом C++.
Если требуется, то где формулировка, подтверждающая это? Если нет, то как далеко вы сможете зайти?
void g(T t) { +(()=/)(/)§(/)(/)/=)$§/%)=§(/&%=)§/(%)=§/%§; // требуется диагностика? }}}}}}}}}}}}}}}}}}}}}; // требуется диагностика? } Похоже, что компилятору приходится сопоставлять фигурные скобки, чтобы знать, произошла ли синтаксическая ошибка внутри шаблона или снаружи. Возникает еще два вопроса:
[*]Являются ли синтаксические ошибки просто IFNDR в целом, а не только в шаблонах? [*]Есть ли какая-либо формулировка, в которой говорится, что необходимо выполнять сопоставление фигурных скобок?
Мобильная версия