Я получаю предупреждение при компиляции приведенного ниже кода в VS2008 с включенным MFC. Буст версия 1.39
include "boost/flyweight.hpp"
include "boost/flyweight/key_value.hpp"
class Foo
{
public:
Foo(const CString& item) : mfoo(item) {}
const CString& getkeyvalue() const {return mfoo;}
private:
const CString mfoo;
};
struct Conversion
{
const CString& operator() (const Foo& item) const {return item.getkeyvalue();}
};
using namespace boost::flyweights;
flyweight<key_value<CString, Foo, Conversion>, tag<Foo> > flyweight_test;
Последняя строка в приведенном выше коде выдает предупреждение
d: \ work \ sourcecode \ boost1390 \ boost \ functions \ hash \ extensions.hpp (72): предупреждение C4800: 'const wchar_t *'
: принудительное значение bool 'true' или 'false' (предупреждение о производительности)
d: \ work \ sourcecode \ boost1390 \ boost \ functions \ hash \ extensions.hpp (71): при компиляции функции-члена шаблона класса size_t boost::hash<T>::operator ()(const T &) const
с
[
T=ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t>>
]
d: \ work \ sourcecode \ boost1390 \ boost \ multi_index \ hashedindex.hpp (1159): см. ссылку на создание экземпляра шаблона класса 'boost :: hash ', компилируемого с
[
T=ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t>>
]
Это предупреждение появляется и продолжается через фабрику хэширования, MPL и т. Д.
Почему там предупреждение и как мне исправить код, чтобы не выводилось предупреждение?
Edit:
Чтобы исправить, добавьте ниже реализацию hash_value
template<typename CharType, typename TraitsType>
std::size_t hash_value(const ATL::CStringT<CharType, TraitsType>& s)
{
return CStringElementTraits<typename TraitsType>::Hash(s);
}