Ответ 1
Они могли. Таким образом, большинство ранних реализаций шаблонов
работал и по-прежнему работает с компилятором Microsoft. Это чувствовалось
(в комитете), что это слишком склонно к ошибкам; это слишком легко
случайно захватить имя, с экземпляром в одном переводе
единица выбирает локальное имя, а не желаемый глобальный символ. (A
типичная единица перевода будет состоять из последовательности #include
s,
объявляя имена, которые должны видеть все, за которыми следует реализация
код. В момент инстанцирования все, что предшествует
отображается мнимая, включая код реализации.)
Окончательное решение состояло в том, чтобы классифицировать символы в шаблоне на два
категории: зависимые и не зависимые, и настаивать на том, чтобы
не зависящие символы будут разрешены в точке определения
шаблон, чтобы уменьшить риск того, что они случайно связаны с некоторыми
локальные символы реализации. В сочетании с требованием указать
typename
и template
, если это необходимо для зависимых символов, это
также позволяет анализировать и проверять некоторые ошибки в точке определения
шаблона, а не только при создании экземпляра шаблона.