Add insert constraints #11
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ограничения на тип лежащий в нашем векторе ограничиваются
is_nothrow_move_constructible_v || is_copy_constructible_v(назовём условиямиC1иM1), однако этого не всегда хватает методуinsert. По-хорошему в нём должна быть добавка о том, что типis_copy_assignable_v(условиеC2) иis_move_assignable_v(условиеM2) для соответствующих версий метода. Если их не будет, то вектор допускает использование такого типа (что является немного странным):В моём коде использование вектора с таким типом является возможным только до первого использования метода
insertилиerase, поскольку иначе проект не компилируется clang'ом (gcc в том числе) по причине невозможности сделатьstd::rotate, который в свою очередь используетstd::swap(или аналогичныйstd::iter_swap). Свап требует явного выполнения условийC1&C2ИЛИM1&M2.Мне кажется, что лучше явно прописать эти условия, чтобы избежать возможности создания таких "поломанных" векторов. К тому же в стандартном
std::vector::insertоговаривается, что невыполнение условияC2илиM2для соответствующих версий методов выливается вundefined behaviour, что мы наверное тоже хотим запретить.