Копирование std :: vector, заполненное ни скопируемой конструкцией, ни копированием, ни скопируемыми элементамиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Копирование std :: vector, заполненное ни скопируемой конструкцией, ни копированием, ни скопируемыми элементами

Сообщение Anonymous »

Считайте, что у меня есть класс A , который не является ни скопируемым, ни скопирующим назначенный, но имеет какой-либо подобный конструктор a (auto &&) . Могу ли я создать копии std :: vector then?

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

#include 
#include 

struct A {
A() {}
A(const A&) = delete;
A(auto &&) {}
A & operator=(const A&) = delete;
};
static_assert(!std::copy_constructible);

const std::vector v(3);
auto w( v ); // fails only in libstdc++
в gcc с libstdc ++ Компиляция не выполняется с довольно длинным сообщением об ошибке, где основная часть, кажется,:

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

/opt/compiler-explorer/gcc-14.2.0/include/c++/14.2.0/bits/stl_uninitialized.h:90:56: error: static assertion failed: result type must be constructible from input type
90 |       static_assert(is_constructible::value,
|                                                        ^~~~~
Однако как MSVC, так и Clang с Libc ++ Примите программу просто хорошо. Онлайн демонстрация: https://gcc.godbolt.org/z/vhdegn5sv
Какая реализация здесь правильная?

Подробнее здесь: https://stackoverflow.com/questions/795 ... -assignabl
Ответить

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

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

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

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

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