Предупреждения при создании 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 ) 
Другие вопросы по тегам