Что означает достоверность шаблонного кода? - PullRequest
2 голосов
/ 30 мая 2019

Правильность нешаблонного кода более или менее понятна каждому - компилятор проверяет синтаксис, типы и правила. Компилятор имеет все необходимое для выполнения этих проверок.

Но когда компилятору приходится компилировать шаблонный код (например, STL или Boost), у него недостаточно информации. Хотя шаблонный код не создается, компилятор не знает, что означают операции, определены ли они для типов, которые будут использоваться для создания экземпляров этого шаблонного кода и т. Д. Шаблонный код не может быть скомпилирован до реализации.

Существует ли такая вещь, как достоверность шаблонного кода? Требуется ли от нас компилировать каждый экземпляр шаблонного кода для проверки его достоверности?

1 Ответ

0 голосов
/ 31 мая 2019

Стандарт говорит о такой действительности:

Срок действия шаблона может быть проверен до любого экземпляра. [ Примечание : Зная, какие имена являются именами типов, можно таким образом проверять синтаксис каждого шаблона. - Конечная нота ]

Как отмечается в примечании, надежная проверка является просто синтаксической (или основанной на грамматике). Даже такие правила, как поиск не зависимых имен, охватываются правилом, согласно которому любой шаблон, который не может быть создан, плохо сформирован, диагностика не требуется . Затем реализация может делать что угодно, включая компиляцию программы, которая делает ... что-то. (Это на самом деле слишком большая свобода реализации; некоторые из этих правил могут быть просто «могут быть плохо сформированы (с диагностикой) по усмотрению реализации».)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...