Actions
Bug #54279
closedc++20: compilation failures around BitVector::NoInitAllocator
% Done:
0%
Source:
Tags:
Backport:
octopus,pacific
Regression:
No
Severity:
3 - minor
Reviewed:
Description
NoInitAllocator inherits from std::allocator<__u32>. c++20 removed a lot of deprecated things from std::allocator (see https://en.cppreference.com/w/cpp/memory/allocator). we should probably be specializing std::allocator_traits for NoInitAllocator now, rather than inheriting from std::allocator
built with gcc 11.2.1, with c++20 enabled in cmake:
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1157df00a19..b20e43b6bbb 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -211,8 +211,8 @@ if(HAVE_INTEL)
endif()
endif()
-# require c++17
-set(CMAKE_CXX_STANDARD 17)
+# require c++20
+set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 99)
example compilation error:
FAILED: src/test/librbd/CMakeFiles/unittest_librbd.dir/test_mock_DeepCopyRequest.cc.o /usr/bin/c++ -DBOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION -DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT -DHAVE_CONFIG_H -DTEST_LIBRBD_INTERNALS -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D_REENTRANT -D_THREAD_SAFE -D__CEPH__ -D__STDC_FORMAT_MACROS -D__linux__ -Iceph/build/src/include -Iceph/src -isystem ceph/build/include -isystem ceph/src/xxHash -isystem ceph/src/rapidjson/include -isystem ceph/src/fmt/include -isystem ceph/src/googletest/googlemock/include -isystem ceph/src/googletest/googlemock -isystem ceph/src/googletest/googletest/include -isystem ceph/src/googletest/googletest -g -Og -fPIE -Wall -fno-strict-aliasing -fsigned-char -Wtype-limits -Wignored-qualifiers -Wpointer-arith -Werror=format-security -Winit-self -Wno-unknown-pragmas -Wnon-virtual-dtor -Wno-ignored-qualifiers -ftemplate-depth-1024 -Wpessimizing-move -Wredundant-move -Wstrict-null-sentinel -Woverloaded-virtual -fno-new-ttp-matching -DCEPH_DEBUG_MUTEX -fstack-protector-strong -D_GLIBCXX_ASSERTIONS -fdiagnostics-color=auto -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -std=c++20 -MD -MT src/test/librbd/CMakeFiles/unittest_librbd.dir/test_mock_DeepCopyRequest.cc.o -MF src/test/librbd/CMakeFiles/unittest_librbd.dir/test_mock_DeepCopyRequest.cc.o.d -o src/test/librbd/CMakeFiles/unittest_librbd.dir/test_mock_DeepCopyRequest.cc.o -c ceph/src/test/librbd/test_mock_DeepCopyRequest.cc In file included from /usr/include/c++/11/ext/alloc_traits.h:34, from /usr/include/c++/11/bits/basic_string.h:40, from /usr/include/c++/11/string:55, from ceph/src/include/rbd/librbd.hpp:18, from ceph/src/test/librbd/test_fixture.h:5, from ceph/src/test/librbd/test_mock_fixture.h:7, from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4: /usr/include/c++/11/bits/alloc_traits.h: In substitution of ‘template<class _Alloc, class _Up> using __alloc_rebind = typename std::__allocator_traits_base::__rebind<_Alloc, _Up>::type [with _Alloc = ceph::BitVector<2>::NoInitAllocator; _Up = unsigned int]’: /usr/include/c++/11/bits/alloc_traits.h:213:8: required by substitution of ‘template<class _Alloc> template<class _Tp> using rebind_alloc = std::__alloc_rebind<_Alloc, _Tp> [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator]’ /usr/include/c++/11/ext/alloc_traits.h:120:65: required from ‘struct __gnu_cxx::__alloc_traits<ceph::BitVector<2>::NoInitAllocator, unsigned int>::rebind<unsigned int>’ /usr/include/c++/11/bits/stl_vector.h:87:21: required from ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ /usr/include/c++/11/bits/stl_vector.h:389:11: required from ‘class std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ ceph/src/common/bit_vector.hpp:242:47: required from ‘class ceph::BitVector<2>’ ceph/src/common/bit_vector.hpp:641:1: required from here /usr/include/c++/11/bits/alloc_traits.h:79:11: error: no type named ‘type’ in ‘struct std::__allocator_traits_base::__rebind<ceph::BitVector<2>::NoInitAllocator, unsigned int, void>’ 79 | using __alloc_rebind | ^~~~~~~~~~~~~~ In file included from /usr/include/c++/11/vector:67, from ceph/src/include/rbd/librbd.hpp:21, from ceph/src/test/librbd/test_fixture.h:5, from ceph/src/test/librbd/test_mock_fixture.h:7, from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4: /usr/include/c++/11/bits/stl_vector.h: In instantiation of ‘class std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’: ceph/src/common/bit_vector.hpp:242:47: required from ‘class ceph::BitVector<2>’ ceph/src/common/bit_vector.hpp:641:1: required from here /usr/include/c++/11/bits/stl_vector.h:474:20: error: ‘_M_allocate’ has not been declared in ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Base’ 474 | using _Base::_M_allocate; | ^~~~~~~~~~~ /usr/include/c++/11/bits/stl_vector.h:475:20: error: ‘_M_deallocate’ has not been declared in ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Base’ 475 | using _Base::_M_deallocate; | ^~~~~~~~~~~~~ /usr/include/c++/11/bits/stl_vector.h:477:20: error: ‘_M_get_Tp_allocator’ has not been declared in ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Base’ 477 | using _Base::_M_get_Tp_allocator; | ^~~~~~~~~~~~~~~~~~~ In file included from ceph/src/librbd/deep_copy/ImageCopyRequest.h:9, from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:13: ceph/src/common/bit_vector.hpp: In instantiation of ‘void ceph::BitVector<<anonymous> >::encode_data(ceph::bufferlist&, uint64_t, uint64_t) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list; uint64_t = long unsigned int]’: ceph/src/common/bit_vector.hpp:559:3: required from ‘void ceph::BitVector<<anonymous> >::encode(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’ ceph/src/common/bit_vector.hpp:641:1: required from here ceph/src/common/bit_vector.hpp:354:16: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ and ‘uint64_t’ {aka ‘long unsigned int’}) 354 | m_data_crcs[data_byte_offset / BLOCK_SIZE] = bit.crc32c(0); | ~~~~~~~~~~~^ ceph/src/common/bit_vector.hpp: In instantiation of ‘void ceph::BitVector<<anonymous> >::decode_data(ceph::buffer::v15_2_0::list::const_iterator&, uint64_t) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>; uint64_t = long unsigned int]’: ceph/src/common/bit_vector.hpp:575:3: required from ‘void ceph::BitVector<<anonymous> >::decode(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’ ceph/src/common/bit_vector.hpp:641:1: required from here ceph/src/common/bit_vector.hpp:388:20: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ and ‘uint64_t’ {aka ‘long unsigned int’}) 388 | m_data_crcs[data_byte_offset / BLOCK_SIZE] != bit.crc32c(0)) { | ~~~~~~~~~~~^ In file included from /usr/include/c++/11/vector:67, from ceph/src/include/rbd/librbd.hpp:21, from ceph/src/test/librbd/test_fixture.h:5, from ceph/src/test/librbd/test_mock_fixture.h:7, from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4: /usr/include/c++/11/bits/stl_vector.h: In instantiation of ‘std::vector<_Tp, _Alloc>::size_type std::vector<_Tp, _Alloc>::size() const [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’: ceph/src/common/bit_vector.hpp:434:34: required from ‘void ceph::BitVector<<anonymous> >::encode_footer(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’ ceph/src/common/bit_vector.hpp:560:3: required from ‘void ceph::BitVector<<anonymous> >::encode(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’ ceph/src/common/bit_vector.hpp:641:1: required from here /usr/include/c++/11/bits/stl_vector.h:919:40: error: ‘const struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’ 919 | { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); } | ~~~~~~~~~~~~~~^~~~~~~~~ /usr/include/c++/11/bits/stl_vector.h:919:66: error: ‘const struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’ 919 | { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); } | ~~~~~~~~~~~~~~^~~~~~~~ In file included from ceph/src/librbd/deep_copy/ImageCopyRequest.h:9, from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:13: ceph/src/common/bit_vector.hpp: In instantiation of ‘void ceph::BitVector<<anonymous> >::encode_data_crcs(ceph::bufferlist&, uint64_t, uint64_t) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list; uint64_t = long unsigned int]’: ceph/src/common/bit_vector.hpp:436:5: required from ‘void ceph::BitVector<<anonymous> >::encode_footer(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’ ceph/src/common/bit_vector.hpp:560:3: required from ‘void ceph::BitVector<<anonymous> >::encode(ceph::bufferlist&) const [with unsigned char _bit_count = 2; ceph::bufferlist = ceph::buffer::v15_2_0::list]’ ceph/src/common/bit_vector.hpp:641:1: required from here ceph/src/common/bit_vector.hpp:502:28: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ and ‘uint64_t’ {aka ‘long unsigned int’}) 502 | __u32 crc = m_data_crcs[crc_index++]; | ~~~~~~~~~~~^ ceph/src/common/bit_vector.hpp: In instantiation of ‘void ceph::BitVector<<anonymous> >::decode_data_crcs(ceph::buffer::v15_2_0::list::const_iterator&, uint64_t) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>; uint64_t = long unsigned int]’: ceph/src/common/bit_vector.hpp:454:5: required from ‘void ceph::BitVector<<anonymous> >::decode_footer(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’ ceph/src/common/bit_vector.hpp:572:3: required from ‘void ceph::BitVector<<anonymous> >::decode(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’ ceph/src/common/bit_vector.hpp:641:1: required from here ceph/src/common/bit_vector.hpp:523:16: error: no match for ‘operator[]’ (operand types are ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>’ and ‘uint64_t’ {aka ‘long unsigned int’}) 523 | m_data_crcs[crc_index++] = crc; | ~~~~~~~~~~~^ In file included from /usr/include/c++/11/vector:67, from ceph/src/include/rbd/librbd.hpp:21, from ceph/src/test/librbd/test_fixture.h:5, from ceph/src/test/librbd/test_mock_fixture.h:7, from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4: /usr/include/c++/11/bits/stl_vector.h: In instantiation of ‘void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type) [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’: ceph/src/common/bit_vector.hpp:288:21: required from ‘void ceph::BitVector<<anonymous> >::resize(uint64_t, bool) [with unsigned char _bit_count = 2; uint64_t = long unsigned int]’ ceph/src/common/bit_vector.hpp:330:9: required from ‘void ceph::BitVector<<anonymous> >::decode_header(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’ ceph/src/common/bit_vector.hpp:565:3: required from ‘void ceph::BitVector<<anonymous> >::decode(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’ ceph/src/common/bit_vector.hpp:641:1: required from here /usr/include/c++/11/bits/stl_vector.h:942:41: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’ 942 | _M_erase_at_end(this->_M_impl._M_start + __new_size); | ~~~~~~~~~~~~~~^~~~~~~~ In file included from /usr/include/c++/11/vector:72, from ceph/src/include/rbd/librbd.hpp:21, from ceph/src/test/librbd/test_fixture.h:5, from ceph/src/test/librbd/test_mock_fixture.h:7, from ceph/src/test/librbd/test_mock_DeepCopyRequest.cc:4: /usr/include/c++/11/bits/vector.tcc: In instantiation of ‘void std::vector<_Tp, _Alloc>::_M_default_append(std::vector<_Tp, _Alloc>::size_type) [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’: /usr/include/c++/11/bits/stl_vector.h:940:4: required from ‘void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp, _Alloc>::size_type) [with _Tp = unsigned int; _Alloc = ceph::BitVector<2>::NoInitAllocator; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’ ceph/src/common/bit_vector.hpp:288:21: required from ‘void ceph::BitVector<<anonymous> >::resize(uint64_t, bool) [with unsigned char _bit_count = 2; uint64_t = long unsigned int]’ ceph/src/common/bit_vector.hpp:330:9: required from ‘void ceph::BitVector<<anonymous> >::decode_header(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’ ceph/src/common/bit_vector.hpp:565:3: required from ‘void ceph::BitVector<<anonymous> >::decode(ceph::buffer::v15_2_0::list::const_iterator&) [with unsigned char _bit_count = 2; ceph::buffer::v15_2_0::list::const_iterator = ceph::buffer::v15_2_0::list::iterator_impl<true>]’ ceph/src/common/bit_vector.hpp:641:1: required from here /usr/include/c++/11/bits/vector.tcc:617:56: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_end_of_storage’ 617 | size_type __navail = size_type(this->_M_impl._M_end_of_storage | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:618:58: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’ 618 | - this->_M_impl._M_finish); | ~~~~~~~~~~~~~~^~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:626:29: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’ 626 | this->_M_impl._M_finish = | ~~~~~~~~~~~~~~^~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:627:64: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’ 627 | std::__uninitialized_default_n_a(this->_M_impl._M_finish, | ~~~~~~~~~~~~~~^~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:628:74: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’? 628 | __n, _M_get_Tp_allocator()); | ~~~~~~~~~~~~~~~~~~~^~ | get_allocator /usr/include/c++/11/bits/vector.tcc:636:48: in ‘constexpr’ expansion of ‘std::vector<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_S_use_relocate()’ /usr/include/c++/11/bits/vector.tcc:636:15: error: ‘constexpr’ call flows off the end of the function 636 | if _GLIBCXX17_CONSTEXPR (_S_use_relocate()) | ^~ /usr/include/c++/11/bits/vector.tcc:641:55: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’? 641 | __n, _M_get_Tp_allocator()); | ~~~~~~~~~~~~~~~~~~~^~ | get_allocator /usr/include/c++/11/bits/vector.tcc:645:36: error: ‘_M_deallocate’ was not declared in this scope; did you mean ‘fallocate’? 645 | _M_deallocate(__new_start, __len); | ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ | fallocate /usr/include/c++/11/bits/vector.tcc:648:45: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’ 648 | _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish, | ~~~~~~~~~~~~~~^~~~~~~~ /usr/include/c++/11/bits/vector.tcc:648:69: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’ 648 | _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish, | ~~~~~~~~~~~~~~^~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:649:63: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’? 649 | __new_start, _M_get_Tp_allocator()); | ~~~~~~~~~~~~~~~~~~~^~ | get_allocator /usr/include/c++/11/bits/vector.tcc:657:55: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’? 657 | __n, _M_get_Tp_allocator()); | ~~~~~~~~~~~~~~~~~~~^~ | get_allocator /usr/include/c++/11/bits/vector.tcc:660:45: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’ 660 | this->_M_impl._M_start, this->_M_impl._M_finish, | ~~~~~~~~~~~~~~^~~~~~~~ /usr/include/c++/11/bits/vector.tcc:660:69: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’ 660 | this->_M_impl._M_start, this->_M_impl._M_finish, | ~~~~~~~~~~~~~~^~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:667:58: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’? 667 | _M_get_Tp_allocator()); | ~~~~~~~~~~~~~~~~~~~^~ | get_allocator /usr/include/c++/11/bits/vector.tcc:668:36: error: ‘_M_deallocate’ was not declared in this scope; did you mean ‘fallocate’? 668 | _M_deallocate(__new_start, __len); | ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ | fallocate /usr/include/c++/11/bits/vector.tcc:671:47: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’ 671 | std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, | ~~~~~~~~~~~~~~^~~~~~~~ /usr/include/c++/11/bits/vector.tcc:671:71: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’ 671 | std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, | ~~~~~~~~~~~~~~^~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:672:52: error: ‘_M_get_Tp_allocator’ was not declared in this scope; did you mean ‘get_allocator’? 672 | _M_get_Tp_allocator()); | ~~~~~~~~~~~~~~~~~~~^~ | get_allocator /usr/include/c++/11/bits/vector.tcc:675:43: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’ 675 | _M_deallocate(this->_M_impl._M_start, | ~~~~~~~~~~~~~~^~~~~~~~ /usr/include/c++/11/bits/vector.tcc:676:43: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_end_of_storage’ 676 | this->_M_impl._M_end_of_storage | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:677:45: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’ 677 | - this->_M_impl._M_start); | ~~~~~~~~~~~~~~^~~~~~~~ /usr/include/c++/11/bits/vector.tcc:675:28: error: ‘_M_deallocate’ was not declared in this scope; did you mean ‘fallocate’? 675 | _M_deallocate(this->_M_impl._M_start, | ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ 676 | this->_M_impl._M_end_of_storage | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 677 | - this->_M_impl._M_start); | ~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:678:29: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_start’ 678 | this->_M_impl._M_start = __new_start; | ~~~~~~~~~~~~~~^~~~~~~~ /usr/include/c++/11/bits/vector.tcc:679:29: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_finish’ 679 | this->_M_impl._M_finish = __new_start + __size + __n; | ~~~~~~~~~~~~~~^~~~~~~~~ /usr/include/c++/11/bits/vector.tcc:680:29: error: ‘struct std::_Vector_base<unsigned int, ceph::BitVector<2>::NoInitAllocator>::_Vector_impl’ has no member named ‘_M_end_of_storage’ 680 | this->_M_impl._M_end_of_storage = __new_start + __len; | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
Updated by Casey Bodley about 2 years ago
- Status changed from New to Fix Under Review
- Pull request ID set to 45031
it looks like the only issue is that std::allocator<T>::rebind was removed, and std::allocator_traits was unable to use the default rebind = NoInitAllocator<U> because NoInitAllocator wasn't templated on its value type
Updated by Casey Bodley about 2 years ago
- Backport set to octopus pacific quincy
Updated by Ilya Dryomov about 2 years ago
- Backport changed from octopus pacific quincy to octopus,pacific
Updated by Ilya Dryomov about 2 years ago
- Status changed from Fix Under Review to Pending Backport
Updated by Backport Bot about 2 years ago
- Copied to Backport #54379: pacific: c++20: compilation failures around BitVector::NoInitAllocator added
Updated by Backport Bot about 2 years ago
- Copied to Backport #54380: octopus: c++20: compilation failures around BitVector::NoInitAllocator added
Updated by Ilya Dryomov almost 2 years ago
- Status changed from Pending Backport to Resolved
Actions