контейнер с летучим типом POD

У меня есть некоторый (скажем, динамически генерируемый) код и контейнер STL с данными POD (скажем, std::vector< T > из static_assert(std::is_floating_point< T >::value, "!");) который получил доступ из этого кода.

Видимо мне нужно объявить данные с volatile Классификатор. Но в таком случае НКУ выдает ошибку:

c:\mingw\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\ext\new_allocator.h:110: ошибка: invalid conversion from 'volatile void*' to 'void*' [-fpermissive]
{ ::operator delete(__p); }

c:\mingw\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_construct.h:75: ошибка: invalid static_cast from type 'volatile double*' to type 'void*'
{ ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }

c:\mingw\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_algobase.h:372: error: invalid conversion from 'volatile void*' to 'void*' [-fpermissive]
__builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
^
c:\mingw\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_algobase.h:372: error: invalid conversion from 'const volatile void*' to 'const void*' [-fpermissive]

Это единственное решение, что я должен предоставить свой собственный распределитель с надлежащей коррекцией преобразования указателей?

1

Решение

Вектор volatile объекты не могут работать со стандартным распределителем. Eсть Ошибка GCC откройте это, и это выглядит как дефект в стандарте, а не в GCC.

Вы должны предоставить свой собственный распределитель.

1

Другие решения

Если вам нужно привести от изменчивого T * к T *, вам нужно использовать const_cast (сюрприз, сюрприз!). Дальнейшее приведение к void * потребует static_cast или reinterpret_cast.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector