Следующий код выдает предупреждение:
boost::gil::rgb8_image_t img(10, 10);
boost::gil::png_write_view("TenByTen.png", view(img));
при компиляции с VS 2010 под 64 бит. Это говорит:
\boost\gil\extension\io\png_io_private.hpp(341): warning C4244: 'argument' : conversion from '__int64' to 'png_uint_32', possible loss of data
\boost\gil\extension\io\png_io.hpp(202) : see reference to function template instantiation 'void boost::gil::detail::png_writer::apply<View>(const View &)' being compiled
with
[
View=boost::gil::image_view<boost::gil::rgb8_loc_t>
]
main.cpp(20) : see reference to function template instantiation 'void boost::gil::png_write_view<boost::gil::image_view<Loc>>(const char *,const View &)' being compiled
with
[
Loc=boost::gil::rgb8_loc_t,
View=boost::gil::image_view<boost::gil::rgb8_loc_t>
]
Кажется совершенно очевидным, что в apply () вызов png_set_IHDR () должен дать png_uint_32, но view.width () представляется подписанным __int64 (возможно, ptrdiff_t).
Кто-нибудь знает, что я мог с этим поделать?
Я предполагаю, что boost: gil предназначен для работы под 64 битами.
Я использую Boost 1_50.
Кажется, что конкретная проблема известна из (по крайней мере) Boost v1.35 (например, http://objectmix.com/c/733997-how-use-graphics.html#post2586573).
проверка Boost trac база данных Я вижу похожие билеты для других модулей, но ничего для GIL.
Наверное, лучше всего открыть новый билет.
Между тем, поскольку это не кажется «катастрофическим», вы можете обернуть #include
(s) таким образом:
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4244) // Perhaps also 4100, 4127, 4512
// GIL headers
# pragma warning(pop)
#endif
Смотрите также Как: включить и отключить анализ кода для определенных предупреждений C / C ++
(с Clang / GCC у вас есть -isystem
переключиться, но я не думаю, что Visual Studio позволяет различать файлы приложений / заголовков)