Задача задачи:
пользователи обычно выражают обеспокоенность Microsoft Visual C (MSVC), осуществляющий коррекции. Какие конкретные аспекты механизма не могут работать, как и ожидалось? Однако возникают сомнения относительно того, проверяет ли эта проверка, являются ли имена, используемые в шаблонах надлежащим образом. Он не может проверить наличие объявленных имен, что приводит к вопросам компиляции, когда именам не хватает надлежащих объявлений.
, чтобы проиллюстрировать это, рассмотрим следующий пример: int foo (void*);
шаблон
стандартный компилятор разрешает вызов Foo (0) во время первой фазы и связывает его с foo (void*). Тем не менее, MSVC откроет этот процесс во второй этап, неправильно связывая Foo (0) с foo (int) и, как приводит к ошибке.
, кроме того, реализация MSVC второй фазы отклоняется от языковой спецификации двумя способами:
. Phase.он неправильно разрешает зависимые выражения, такие как bar (t) в коде ниже, к объявлениям, которые видны только во время второй фазы.
int foo(void*); templatestruct S { S() { int i = foo(0); } }; void foo(int); int main() { S s; }
В обоих случаях поведение MSVC противоречит указанному разделению между первым и вторым этапами экземпляра шаблона. Эта неправильная реализация сохраняется в Visual Studio 2015.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3