Можно ли заранее объявить функцию, принимающую вектор неполного типа со значением по умолчанию?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли заранее объявить функцию, принимающую вектор неполного типа со значением по умолчанию?

Сообщение Anonymous »


Приведенный ниже фрагмент кода демонстрирует реальную проблему, с которой я недавно столкнулся в своей программе:

#include класс А; void f( const std::vector & = {}); Существует неполный класс A и объявление функции, принимающее vector из A с пустым значением по умолчанию. И функция даже нигде не вызывается.

Он отлично работает и в GCC, и в Clang 14, но начиная с Clang 15 появляется ошибка:

В файле, включенном из :1: /opt/compiler-explorer/clang-15.0.0/bin/../include/c++/v1/vector:540:52: ошибка: арифметика по указателю на неполный тип "A" {return static_cast(__end_cap() - this->__begin_);} ~~~~~~~~~~~ ^ /opt/compiler-explorer/clang-15.0.0/bin/../include/c++/v1/vector:760:56: примечание: при создании экземпляра функции-члена запрашивается 'std::vector::capacity' здесь __annotate_contigious_container(data(), data() + емкость(), ^ /opt/compiler-explorer/clang-15.0.0/bin/../include/c++/v1/vector:431:7: примечание: при создании экземпляра функции-члена запрашивается 'std::vector::__annotate_delete' здесь __annotate_delete(); ^ :5:32: примечание: при создании экземпляра функции-члена 'std::vector::~vector', запрошенной здесь void f( const std::vector & = {}); ^ :3:7: примечание: предварительное объявление «A» класс А; ^ Онлайн-демо: https://godbolt.org/z/a8xzshbzP

Правильны ли новые версии Clang, отвергая программу?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»