Похоже, что Boost имеет некоторую ошибочную логику, чтобы определить, следует ли выводить из T
или нет.
Наивно, можно предположить, что любой тип, кроме нативного типа или указателя, может использоваться в качестве базы. Однако enum
s не являются ни базовыми, ни примитивными. Возможно, они не смогли объяснить это.
Похоже, что Boost неправильно определяет, что enum
s совместимы с его эмуляцией rvalue-reference.
Лучший способ решить эту проблему - избегать использования перечислений в структурах Boost Interprocess.
Взломать как
namespace boost {
namespace interprocess { // get inside boost
template<>
class is_movable<Test::Types> // add custom specialization of is_movable
: public ::boost::mpl::bool_<false>
{};
}}
может исправить ситуацию. Непроверенные.
Добавьте это сразу после #include
с, чтобы оно появилось перед первым использованием.