Код: Выделить всё
class Foo {
public:
Foo(const Foo& foo) = delete;
Foo(Foo&& foo) = default;
Foo() = default;
};
Код: Выделить всё
In file included from /usr/include/c++/11/vector:66,
from test_rand.cpp:3:
/usr/include/c++/11/bits/stl_uninitialized.h: In instantiation of ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const Foo*; _ForwardIterator = Foo*]’:
/usr/include/c++/11/bits/stl_uninitialized.h:333:37: required from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator&) [with _InputIterator = const Foo*; _ForwardIterator = Foo*; _Tp = Foo]’
/usr/include/c++/11/bits/stl_vector.h:1585:33: required from ‘void std::vector::_M_range_initialize(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = const Foo*; _Tp = Foo; _Alloc = std::allocator]’
/usr/include/c++/11/bits/stl_vector.h:629:21: required from ‘std::vector::vector(std::initializer_list, const allocator_type&) [with _Tp = Foo; _Alloc = std::allocator; std::vector::allocator_type = std::allocator]’
test_rand.cpp:13:23: required from here
/usr/include/c++/11/bits/stl_uninitialized.h:138:72: error: static assertion failed: result type must be constructible from value type of input range
138 | static_assert(is_constructible::value,
| ^~~~~
/usr/include/c++/11/bits/stl_uninitialized.h:138:72: note: ‘std::integral_constant::value’ evaluates to false
Я хотел бы знать:
- Что на самом деле означает это сообщение об ошибке: я искал использование is_constructible , и похоже, что он проверяет, можете ли вы создать объект с определенными параметрами. Тогда какие параметры вектор пытается проверить для типа Foo?
- Почему такое поведение для вектора и массива отличается?
- Каков внутренний процесс при построении вектора следующим образом: я думал, что это будет то же самое, что вызов .push_back с переданным значением rvalue, чтобы можно было вызвать конструктор перемещения, и он не вызывал ошибок.
- Можно ли внести некоторые изменения в класс Foo, чтобы он работал при построении вектора< /code> со списком инициализации? (без предоставления конструктора копирования)
Подробнее здесь: https://stackoverflow.com/questions/787 ... nly-have-m