В соответствии со стандартным языком это несоответствие libstdc ++.
Это, вероятно, ошибка. make_shared
вызывает allocate_shared
со стандартным распределителем, std::allocator<remove_const_t<T>>
, где T
- это тип общего объекта. Этот распределитель будет использоваться только для получения переопределенного распределителя для базового общего объекта (структура, которая содержит переменные int и атомарные счетчики). Таким образом, совершенно нормально объявить этот базовый объект неконстантным и нестабильным.
Это определение для make_shared
будет работать:
template<class T,class...Args>
auto make_shared(Args&&...args){
using ncvT= std::remove_cv_t<T>;
return std::allocate_shared<T>(std::allocator<ncvT>(),std::forward<Args>(args)...);
}