Предупреждения при создании boost.bimap внутри класса шаблона (C ++)

Я пытаюсь создать шаблонный класс с boost.bimap в качестве члена. Однако, следуя обычным протоколам typedef, мой компилятор (я использую Visual Studio Express 2012) выдает целый набор предупреждений C4512 (оператор присваивания не может быть сгенерирован).
Как ни странно, код скомпилируется, и если я полностью реализую класс, все будет работать правильно. Я предпочел бы знать причину предупреждения, и как этого избежать, если это возможно.
Если бы у кого-то были какие-то идеи, я был бы очень благодарен!

#ifndef TESTCLASS_H
#define TESTCLASS_H

#include <map>
#include <boost/bimap.hpp>

template<typename T>
class TestClass
{
public:
TestClass()
{

}
private:
typedef boost::bimap<int,int> bimap_t;
typedef bimap_t::value_type valuetype;
};

#endif // TESTCLASS_H

Код bimap вне шаблона не вызывает появления предупреждений.

1

Решение

От Документация MSDN

Вы можете разрешить предупреждение C4512 для своего кода одним из трех способов:

  • Явно определите оператор присваивания для класса.
  • Удалите const или оператор ссылки из элемента данных в классе.
  • Использовать #pragma предупреждение предупреждение для подавления предупреждения.

Если наследовать от boost::noncopyable (который будет первым вариантом) не работает, и вы не можете получить доступ к исходному коду класса (второй вариант), тогда вы остаетесь с #pragma предупреждение

#pragma warning( disable : 4152 )
// your offending code
#pragma warning( pop )
0

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

Других решений пока нет …