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