У меня есть некоторый (скажем, динамически генерируемый) код и контейнер 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]
Это единственное решение, что я должен предоставить свой собственный распределитель с надлежащей коррекцией преобразования указателей?
Вектор volatile
объекты не могут работать со стандартным распределителем. Eсть Ошибка GCC откройте это, и это выглядит как дефект в стандарте, а не в GCC.
Вы должны предоставить свой собственный распределитель.
Если вам нужно привести от изменчивого T * к T *, вам нужно использовать const_cast (сюрприз, сюрприз!). Дальнейшее приведение к void * потребует static_cast или reinterpret_cast.