Hi all,<br><br>I have just checkout gil-contributions svn repo (<a href="http://code.google.com/p/gil-contributions/" target="_blank">http://code.google.com/p/gil-contributions/</a>) in order to test new_io in which I am really interested. Thank you for this very usefull job! I have however some remarks and questions about some compilation issues.<br>


<br>0) The code seems to have been written and tested on Windows. Am I right (see my remarks thereafter)? For ex., why do you use &quot;\\&quot; in paths (paths.hpp) and not &quot;/&quot;?<br>1) Which Boost version is required? I first tried with 1.40, but it did not work because of missing accessors in boost::gil::variant (index() and bits()). Did they appear in 1.41 or 1.42? With 1.42, this issue is solved.<br>


2) While compiling tests, I ran into some issues. I am running the code on an Ubuntu 9.10, with g++-4.3.4. I was able to fix some of them, but others are still problematic:<br>�� 2.1) For each test, I have to add at the beginning the 2 following lines:<br>


<br>#define BOOST_TEST_DYN_LINK
<br>#define BOOST_TEST_MODULE my application tests<br><br>�������� It probably comes from my little knowledge of boost unit_test_framework. Could you explain?<br><br>��� 2.2) For each test, the compiler gave the following error:<br>


<br>/usr/local/include/boost/gil/extension/io_new/detail/dynamic_io_new.hpp:75: error: there are no arguments to �io_error� that depend on a template parameter, so a declaration of �io_error� must be available<br><br>����������� I simply add in <b>[...]/detail/dynamic_io_new.hpp</b> an unclude directive at the beginning of the file : #include &lt;boost/gil/extension/io/io_error.hpp&gt;. Still do not understand how it can work wihtout this ...<br>


<br>���� 2.3) I had a similar error with <b>[...]/formats/bmp/read.hpp</b>:<br><br>/usr/local/include/boost/gil/extension/io_new/formats/bmp/read.hpp:833: error: there are no arguments to �get_info� that depend on a template parameter, so a declaration of �get_info� must be available<br>


<br>����������� I simply changed line 833 from get_info() to parent_t::get_info(). Now works.<br><br>���� 2.4) Some typename are missing (still do not know how visual can infer types ...):<br>����������� - [...]/formats/jpeg/read.hpp, line 336: <b>typename</b> Image::view_t<br>


����������� - [...]/formats/bmp/is_allowed.hpp, line 73: <b>typename</b> View::value_type<br>
����������� - [...]/formats/pnm/read.hpp, line 419: <b>typename</b> Image::view_t<br>����������� Everything works with these changes.<br><br>���� 2.5) png_read_test failed. Obviously, this is a portability issue. PNG filenames for testing are uppercase, while they are lowercase in the test code. I think that is also missing in the code the path to png files. For example, in basic_format_test, instead of <br>


<br>������������������ test_file&lt; gray1_image_t &gt;( &quot;basn0g01.png&quot; );<br>����������� it soulhd be:<br>������������������ test_file&lt; gray1_image_t &gt;(<b> png_in + &quot;BASN0G01.PNG&quot;</b> );<br>���������� I did not rename all files, so I am unable to try the test.<br>


<br>���� 2.6) Some tests fail to compile or link. Here are the errors:<br><br>����������� - <b>all_formats_test.cpp</b>:<br>In file included from /usr/include/png.h:481,<br>���������������� from /usr/local/include/boost/gil/extension/io_new/png_tags.hpp:23,<br>


���������������� from /usr/local/include/boost/gil/extension/io_new/png_read.hpp:22,<br>���������������� from /usr/local/include/boost/gil/extension/io_new/png_all.hpp:22,<br>���������������� from /home/olivier/work/dev/lib/gil-contributions-read-only/gil_2/libs/gil/io_new/test/all_formats_test.cpp:7:<br>


/usr/include/pngconf.h:335: error: expected constructor, destructor, or type conversion before �.� token<br>/usr/include/pngconf.h:336: error: �__dont__� does not name a type<br><br>����������� - <b>pnm_reads_test.cpp</b>:<br>


pnm_read_test.cpp.o: In function `pnm_test::read_header_test::test_method()&#39;:<br>pnm_read_test.cpp:(.text+0x24c0): undefined reference to `boost::gil::pnm_image_type::_color_asc&#39;<br>collect2: ld returned 1 exit status<br>


������������� Do not really understand since _color_asc is a typedef defined in pnm_tags.hpp ...<br><br>����������� - <b>jpeg_old_test.cpp</b> (sorry for the message ...):<br>/usr/local/include/boost/gil/extension/io_new/formats/jpeg/write.hpp: In function �typename BinaryOp::result_type boost::gil::detail::apply_operation(const boost::gil::variant&lt;Types&gt;&amp;, const Info&amp;, BinaryOp) [with Types1 = boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt;, Info = boost::gil::image_write_info&lt;boost::gil::jpeg_tag, boost::gil::detail::no_log&gt;, BinaryOp = boost::gil::detail::dynamic_io_fnobj&lt;boost::gil::detail::jpeg_write_is_supported, boost::gil::detail::writer&lt;boost::gil::detail::file_stream_device&lt;boost::gil::jpeg_tag&gt;, boost::gil::jpeg_tag, boost::gil::detail::no_log&gt; &gt;]�:<br>


/usr/local/include/boost/gil/extension/io_new/formats/jpeg/write.hpp:283:�� instantiated from �void boost::gil::detail::dynamic_image_writer&lt;Device, boost::gil::jpeg_tag, boost::gil::detail::no_log&gt;::apply(const boost::gil::any_image_view&lt;Views&gt;&amp;, const boost::gil::image_write_info&lt;boost::gil::jpeg_tag, boost::gil::detail::no_log&gt;&amp;) [with Views = boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt;, Device = boost::gil::detail::file_stream_device&lt;boost::gil::jpeg_tag&gt;]�<br>


/usr/local/include/boost/gil/extension/io_new/detail/write_view.hpp:302:�� instantiated from �void boost::gil::write_view(Device&amp;, const boost::gil::any_image_view&lt;Types2&gt;&amp;, const boost::gil::image_write_info&lt;FormatTag, Log&gt;&amp;, typename boost::enable_if&lt;typename boost::mpl::and_&lt;typename boost::gil::detail::is_output_device&lt;IODevice&gt;::type, typename boost::gil::is_format_tag&lt;FormatTag&gt;::type, mpl_::bool_&lt;true&gt;, mpl_::bool_&lt;true&gt;, mpl_::bool_&lt;true&gt; &gt;::type, void&gt;::type*) [with Device = boost::gil::detail::file_stream_device&lt;boost::gil::jpeg_tag&gt;, Views = boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt;, FormatTag = boost::gil::jpeg_tag, Log = boost::gil::detail::no_log]�<br>


/usr/local/include/boost/gil/extension/io_new/detail/write_view.hpp:357:�� instantiated from �void boost::gil::write_view(const String&amp;, const boost::gil::any_image_view&lt;Types2&gt;&amp;, const boost::gil::image_write_info&lt;FormatTag, Log&gt;&amp;, typename boost::enable_if&lt;typename boost::mpl::and_&lt;typename boost::gil::detail::is_supported_path_spec&lt;P&gt;::type, typename boost::gil::is_format_tag&lt;FormatTag&gt;::type, mpl_::bool_&lt;true&gt;, mpl_::bool_&lt;true&gt;, mpl_::bool_&lt;true&gt; &gt;::type, void&gt;::type*) [with String = std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, Views = boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt;, FormatTag = boost::gil::jpeg_tag, Log = boost::gil::detail::no_log]�<br>


/usr/local/include/boost/gil/extension/io_new/jpeg_io_old.hpp:169:�� instantiated from �void boost::gil::jpeg_write_view(const String&amp;, const View&amp;, int) [with String = std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;, View = boost::gil::any_image_view&lt;boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt; &gt;]�<br>


/home/olivier/work/dev/lib/gil-contributions-read-only/gil_2/libs/gil/io_new/test/jpeg_old_test.cpp:98:�� instantiated from here<br>/usr/local/include/boost/gil/extension/io_new/formats/jpeg/write.hpp:243: error: invalid initialization of non-const reference of type �boost::gil::variant&lt;boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt; &gt;::base_t&amp;� from a temporary of type �boost::gil::variant&lt;boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt; &gt;::base_t�<br>


/usr/local/include/boost/gil/extension/io_new/formats/jpeg/write.hpp:213: error: in passing argument 1 of �typename Op::result_type boost::gil::detail::apply_operation_base(Bits&amp;, size_t, const Info&amp;, Op) [with Types = boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt;, Info = boost::gil::image_write_info&lt;boost::gil::jpeg_tag, boost::gil::detail::no_log&gt;, Bits = boost::gil::variant&lt;boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgba8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::rgb8_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray16_pixel_t*&gt; &gt; &gt;, boost::mpl::v_item&lt;boost::gil::image_view&lt;boost::gil::memory_based_2d_locator&lt;boost::gil::memory_based_step_iterator&lt;boost::gil::gray8_pixel_t*&gt; &gt; &gt;, boost::mpl::vector0&lt;mpl_::na&gt;, 0&gt;, 0&gt;, 0&gt;, 0&gt; &gt;::base_t, Op = boost::gil::detail::dynamic_io_fnobj&lt;boost::gil::detail::jpeg_write_is_supported, boost::gil::detail::writer&lt;boost::gil::detail::file_stream_device&lt;boost::gil::jpeg_tag&gt;, boost::gil::jpeg_tag, boost::gil::detail::no_log&gt; &gt;]�<br>


/usr/local/include/boost/gil/extension/io_new/formats/jpeg/write.hpp:243: error: return-statement with a value, in function returning &#39;void&#39;<br><br><br>Apart png_read_test and its case sensitive problem, all compiled and linked tests run successfully. This is a really good new! However, could you please help regarding the issues above?<br>


Please note that if you are intersted in a Linux developper/tester for gil, I am wiling to do some jobs ...<br><br><br>Best regards,<br><br>Olivier<br><br><br>