Hi, I am on ubuntu 20.04, I have GCC9.4 and 10.3 and 11.1 installed.
I found that when set "-std=c++20", with gcc11, boost.gil will failed to build. Here is the simple test cpp to reproduce the issue: #include <sstream> #include <boost/gil.hpp> #include <boost/gil/extension/io/png.hpp> namespace gil = boost::gil; int main() { gil::rgb8_image_t img; std::stringstream buf(std::ios::in | std::ios::out | std::ios::binary); gil::read_and_convert_image(buf, img, gil::png_tag{}); return 0; } the build command is: g++ -o test test_gcc11_gil.cc -std=c++20 -I${THIRD_PARTY}/boost/boost_1_78_0 -L${THIRD_PARTY}/libpng/1.6.37/lib/ -lpng If replaced '-std=c++20' with '-std=c++17', the build would be OK, but with 'c++20', gcc 11 failed with the following errors: In file included from /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/read.hpp:13, from /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png.hpp:11, from test_gcc11_gil.cc:3: /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/tags.hpp:576:32: error: expected unqualified-id before ‘)’ token 576 | image_read_info< png_tag >() | ^ /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/tags.hpp:711:36: error: expected unqualified-id before ‘)’ token 711 | image_read_settings< png_tag >() | ^ In file included from /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/read.hpp:21, from /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png.hpp:11, from test_gcc11_gil.cc:3: /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/io/make_reader.hpp: In instantiation of ‘typename boost::gil::get_reader<String, FormatTag, ConversionPolicy>::type boost::gil::make_reader(Device&, const FormatTag&, const ConversionPolicy&, typename std::enable_if<typename boost::mp11::detail::mp_and_impl<boost::mp11::mp_list<boost::gil::detail::is_adaptable_input_device<FormatTag, Device, void>, boost::gil::is_format_tag<FormatTag> >, void>::type::value>::type*) [with Device = std::__cxx11::basic_stringstream<char>; FormatTag = boost::gil::png_tag; ConversionPolicy = boost::gil::detail::read_and_convert<boost::gil::default_color_converter>; typename boost::gil::get_reader<String, FormatTag, ConversionPolicy>::type = boost::gil::reader<boost::gil::detail::istream_device<boost::gil::png_tag>, boost::gil::png_tag, boost::gil::detail::read_and_convert<boost::gil::default_color_converter> >; typename std::enable_if<typename boost::mp11::detail::mp_and_impl<boost::mp11::mp_list<boost::gil::detail::is_adaptable_input_device<FormatTag, Device, void>, boost::gil::is_format_tag<FormatTag> >, void>::type::value>::type = void;typename boost::mp11::detail::mp_and_impl<boost::mp11::mp_list<boost::gil::detail::is_adaptable_input_device<FormatTag, Device, void>, boost::gil::is_format_tag<FormatTag> >, void>::type =std::integral_constant<bool, true>]’: /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/io/read_and_convert_image.hpp:263:34: required from ‘void boost::gil::read_and_convert_image(Device&, Image&, const FormatTag&, typename std::enable_if<typename boost::mp11::detail::mp_and_impl<boost::mp11::mp_list<boost::gil::detail::is_read_device<FormatTag, Device, void>, boost::gil::is_format_tag<FormatTag> >, void>::type::value>::type*) [with Device = std::__cxx11::basic_stringstream<char>; Image = boost::gil::image<boost::gil::pixel<unsigned char, boost::gil::layout<boost::mp11::mp_list<boost::gil::red_t, boost::gil::green_t, boost::gil::blue_t> > >, false, std::allocator<unsigned char> >; FormatTag = boost::gil::png_tag; typename std::enable_if<typename boost::mp11::detail::mp_and_impl<boost::mp11::mp_list<boost::gil::detail::is_read_device<FormatTag, Device, void>, boost::gil::is_format_tag<FormatTag> >, void>::type::value>::type = void; typename boost::mp11::detail::mp_and_impl<boost::mp11::mp_list<boost::gil::detail::is_read_device<FormatTag, Device, void>, boost::gil::is_format_tag<FormatTag> >, void>::type = std::integral_constant<bool, true>]’ test_gcc11_gil.cc:11:30: required from here /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/io/make_reader.hpp:193:30: error: no matching function for call to ‘boost::gil::image_read_settings<boost::gil::png_tag>::image_read_settings()’ 193 | return make_reader(file, image_read_settings<FormatTag>(), cc); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/read.hpp:13, from /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png.hpp:11, from test_gcc11_gil.cc:3: /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/tags.hpp:718:5: note: candidate: ‘boost::gil::image_read_settings<boost::gil::png_tag>::image_read_settings(const point_t&, const point_t&)’ 718 | image_read_settings( const point_t& top_left | ^~~~~~~~~~~~~~~~~~~ /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/tags.hpp:718:5: note: candidate expects 2 arguments, 0 provided /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/tags.hpp:707:8: note: candidate: ‘constexpr boost::gil::image_read_settings<boost::gil::png_tag>::image_read_settings(const boost::gil::image_read_settings<boost::gil::png_tag>&)’ 707 | struct image_read_settings< png_tag > : public image_read_settings_base | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/tags.hpp:707:8: note: candidate expects 1 argument, 0 provided /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/tags.hpp:707:8: note: candidate: ‘constexpr boost::gil::image_read_settings<boost::gil::png_tag>::image_read_settings(boost::gil::image_read_settings<boost::gil::png_tag>&&)’ /data/lin/ThirdParty/boost/boost_1_78_0/boost/gil/extension/io/png/tags.hpp:707:8: note: candidate expects 1 argument, 0 provided Only gcc 11 will fail with '-std=c++20', gcc9 and gcc 10 worked fine. I guess that gcc11 has implemented more c++20 features than gcc9 and gcc10. Since the boost project updates more quickly than gcc, I hope this issue might be fixed in the next boost version. Thanks, Qiang Ren
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users