«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему GCC не может скомпилировать явную специализацию в области, не связанной с пространством имен?

Почему GCC не может скомпилировать явную специализацию в области, не связанной с пространством имен?

Опубликовано 21 декабря 2024 г.
Просматривать:834

Why Does GCC Fail to Compile Explicit Specialization in Non-Namespace Scope?

Явная специализация в области вне пространства имен

Данный код не может скомпилироваться в GCC, несмотря на успешную компиляцию в Clang. Согласно стандарту C ([temp.expl.spec]), явные специализации могут быть объявлены в любой области, где может быть определен соответствующий основной шаблон.

Похоже, что такое поведение является ошибкой в ​​GCC. Согласно CWG 727, правило в [temp.expl.spec] относительно явной специализации было изменено, чтобы разрешить такие объявления в любой соответствующей области.

Область явной специализации

Исходный стандарт гласил, что явная специализация должна быть объявлена ​​в пространстве имен, включающем специализированный шаблон. Однако текущий стандарт допускает явную специализацию в любой области, где может быть определен основной шаблон:

  • Определения классов (12.2)
  • Функции-члены (17.6.2)
  • Встроенные пространства имен (10.3.1.2)

Неспособность GCC соблюдать это обновленное правило представляет собой ошибку. Проблема была идентифицирована как ошибка 85282 и в настоящее время отслеживается командой разработчиков GCC.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3