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

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

Сообщение Anonymous »

Спрыг кода ниже демонстрирует реальную проблему, с которой я недавно столкнулся в своей программе: < /p>

Код: Выделить всё

#include

class A;

void f( const std::vector & = {} );
Существует неполный класс A , и объявление функции, принимающая вектор a с пустым значением по умолчанию. И функция даже нигде не называется. < /P>
она работает нормально в GCC, и в Clang 14, но начиная с Clang 15 появляется ошибка: < /p>

Код: Выделить всё

In file included from :1:
/opt/compiler-explorer/clang-15.0.0/bin/../include/c++/v1/vector:540:52: error: arithmetic on a pointer to an incomplete type 'A'
{return static_cast(__end_cap() - this->__begin_);}
~~~~~~~~~~~ ^
/opt/compiler-explorer/clang-15.0.0/bin/../include/c++/v1/vector:760:56: note: in instantiation of member function 'std::vector::capacity' requested here
__annotate_contiguous_container(data(), data() + capacity(),
^
/opt/compiler-explorer/clang-15.0.0/bin/../include/c++/v1/vector:431:7: note: in instantiation of member function 'std::vector::__annotate_delete' requested here
__annotate_delete();
^
:5:32: note: in instantiation of member function 'std::vector::~vector' requested here
void f( const std::vector & = {} );
^
:3:7: note: forward declaration of 'A'
class A;
^
онлайн демо: https://godbolt.org/z/a8xzshbzp
Правильны ли более новые версии Clang в отвержении программы?

Подробнее здесь: https://stackoverflow.com/questions/773 ... with-a-def
Ответить

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

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

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

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

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