problems with program_options

Hello, In my cvs copy of utf8_codecvt_facet.hpp and utf8_codecvt_facet.cpp files there is CR+CR+LF used as line separator. Also, gcc 3.3.1 (mingw) claims: d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp: In member function `virtual std::codecvt_base::result boost::program_options::detail::utf8_codecvt_facet_wchar_t::do_out(mbstate_t &, const wchar_t*, const wchar_t*, const wchar_t*&, char*, char*, char*&) const ': d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:229: warning: comparison is always false due to limited range of data type d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp: In function ` int <unnamed>::get_cont_octet_out_count_impl(wchar_t) [with unsigned int s = 4]': d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:445: warning: comparison is always true due to limited range of data type d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:451: warning: comparison is always true due to limited range of data type d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:457: warning: comparison is always true due to limited range of data type Also gcc 3.3.1 generates erros like: C:/CPP/MINGW/include/c++/3.3.1/bits/basic_ios.h: In instantiation of `std::basic_ios<wchar_t, std::char_traits<wchar_t> >': d:/sources/boost/libs/program_options/src/config_file.cpp:145: instantiated from `std::basic_istream<wchar_t, std::char_traits<wchar_t> >' d:/sources/boost/libs/program_options/src/config_file.cpp:145: instantiated from here C:/CPP/MINGW/include/c++/3.3.1/bits/basic_ios.h:67: error: no type named ` pos_type' in `struct std::char_traits<wchar_t>' I found pos_type is defined for char_traits<wchar_t> specialization if _GLIBCPP_USE_WCHAR_T is set, but os_defines.h sets _GLIBCPP_USE_WSTRING only. Is it mingw related problem? Regards, Janusz

Hi Janusz,
In my cvs copy of utf8_codecvt_facet.hpp and utf8_codecvt_facet.cpp files there is CR+CR+LF used as line separator.
Fixed, thanks.
Also, gcc 3.3.1 (mingw) claims: d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp: In member function `virtual std::codecvt_base::result
boost::program_options::detail::utf8_codecvt_facet_wchar_t::do_out(mbstate_ t &, const wchar_t*, const wchar_t*, const wchar_t*&, char*, char*, char*&) const ': d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:229: warning: comparison is always false due to limited range of data type d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp: In function ` int <unnamed>::get_cont_octet_out_count_impl(wchar_t) [with unsigned int s = 4]': d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:445: warning: comparison is always true due to limited range of data type
There's something strange. I've only 346 lines in that file. Maybe you could rerun the test, now that I've fixed CR-CR-LF issue and send the new line numbers.
Also gcc 3.3.1 generates erros like: C:/CPP/MINGW/include/c++/3.3.1/bits/basic_ios.h: In instantiation of `std::basic_ios<wchar_t, std::char_traits<wchar_t> >': d:/sources/boost/libs/program_options/src/config_file.cpp:145: instantiated from `std::basic_istream<wchar_t, std::char_traits<wchar_t> >' d:/sources/boost/libs/program_options/src/config_file.cpp:145: instantiated from here C:/CPP/MINGW/include/c++/3.3.1/bits/basic_ios.h:67: error: no type named ` pos_type' in `struct std::char_traits<wchar_t>'
I found pos_type is defined for char_traits<wchar_t> specialization if _GLIBCPP_USE_WCHAR_T is set, but os_defines.h sets _GLIBCPP_USE_WSTRING only. Is it mingw related problem?
I think it's mingw related, since on Linux the library works on g++ 3.2, 3.3 and 3.4. Maybe, you can first check out with the mingw developers. In the meantime, I've comitted the attached patch, which should avoid declaring that specialization. Could you update and try again? - Volodya

Hi, below are all messages from compiler. There aren't "config_file.cpp:145", so patch you applied works. Regards, Janusz C:/CPP/MINGW/include/c++/3.3.1/bits/basic_ios.h: In instantiation of `std::basic_ios<wchar_t, std::char_traits<wchar_t> >': d:/sources/boost/boost/shared_ptr.hpp:138: instantiated from `std::basic_istream<wchar_t, std::char_traits<wchar_t> >' d:/sources/boost/boost/shared_ptr.hpp:138: instantiated from `boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = std::basic_istream<wchar_t, std::char_traits<wchar_t> >, D = boost::program_options::detail::null_deleter, T = std::basic_istream<wchar_t, std::char_traits<wchar_t> >]' d:/sources/boost/boost/shared_ptr.hpp:243: instantiated from `void boost::shared_ptr<T>::reset(Y*, D) [with Y = std::basic_istream<wchar_t, std::char_traits<wchar_t> >, D = boost::program_options::detail::null_deleter, T = std::basic_istream<wchar_t, std::char_traits<wchar_t> >]' d:/sources/boost/boost/program_options/detail/config_file.hpp:132: instantiated from `boost::program_options::detail::basic_config_file_iterator<charT>::basic_co nfig_file_iterator(std::basic_istream<charT, std::char_traits<_CharT> >&, const std::set<std::string, std::less<std::string>, std::allocator<std::string> >&) [with charT = wchar_t]' d:/sources/boost/libs/program_options/src/parsers.cpp:255: instantiated from `boost::program_options::basic_parsed_options<charT> boost::program_options::parse_config_file(std::basic_istream<charT, std::char_traits<_CharT> >&, const boost::program_options::options_description&) [with charT = wchar_t]' d:/sources/boost/libs/program_options/src/parsers.cpp:270: instantiated from here C:/CPP/MINGW/include/c++/3.3.1/bits/basic_ios.h:67: error: no type named ` pos_type' in `struct std::char_traits<wchar_t>' C:/CPP/MINGW/include/c++/3.3.1/istream: In instantiation of `std::basic_istream<wchar_t, std::char_traits<wchar_t> >': d:/sources/boost/boost/shared_ptr.hpp:138: instantiated from `boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = std::basic_istream<wchar_t, std::char_traits<wchar_t> >, D = boost::program_options::detail::null_deleter, T = std::basic_istream<wchar_t, std::char_traits<wchar_t> >]' d:/sources/boost/boost/shared_ptr.hpp:243: instantiated from `void boost::shared_ptr<T>::reset(Y*, D) [with Y = std::basic_istream<wchar_t, std::char_traits<wchar_t> >, D = boost::program_options::detail::null_deleter, T = std::basic_istream<wchar_t, std::char_traits<wchar_t> >]' d:/sources/boost/boost/program_options/detail/config_file.hpp:132: instantiated from `boost::program_options::detail::basic_config_file_iterator<charT>::basic_co nfig_file_iterator(std::basic_istream<charT, std::char_traits<_CharT> >&, const std::set<std::string, std::less<std::string>, std::allocator<std::string> >&) [with charT = wchar_t]' d:/sources/boost/libs/program_options/src/parsers.cpp:255: instantiated from `boost::program_options::basic_parsed_options<charT> boost::program_options::parse_config_file(std::basic_istream<charT, std::char_traits<_CharT> >&, const boost::program_options::options_description&) [with charT = wchar_t]' d:/sources/boost/libs/program_options/src/parsers.cpp:270: instantiated from here C:/CPP/MINGW/include/c++/3.3.1/istream:64: error: no type named `pos_type' in ` struct std::char_traits<wchar_t>' C:/CPP/MINGW/include/c++/3.3.1/bits/istream.tcc:944: error: no type named ` pos_type' in `struct std::char_traits<wchar_t>' C:/CPP/MINGW/include/c++/3.3.1/bits/istream.tcc:957: error: no type named ` pos_type' in `struct std::char_traits<wchar_t>' d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp: In member function `virtual std::codecvt_base::result boost::program_options::detail::utf8_codecvt_facet_wchar_t::do_out(mbstate_t &, const wchar_t*, const wchar_t*, const wchar_t*&, char*, char*, char*&) const ': d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:115: warning: comparison is always false due to limited range of data type d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp: In function ` int <unnamed>::get_cont_octet_out_count_impl(wchar_t) [with unsigned int s = 4]': d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:223: warning: comparison is always true due to limited range of data type d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:226: warning: comparison is always true due to limited range of data type d:/sources/boost/libs/program_options/src/utf8_codecvt_facet.cpp:229: warning: comparison is always true due to limited range of data type

Hello, I attach a diff for parsers.cpp which avoids error in my previous message, but now linker claims :( bin\boost\libs\program_options\build\libboost_program_options.lib\mingw\debu g\threading-multi\libboost_program_options-mgw-mt-d-1_31.lib(convert.obj)(.r data$_ZTVSt7codecvtIwciE+0x10): In function `ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_': C:/CPP/MINGW/include/c++/3.3.1/bits/stl_iterator_base_funcs.h: undefined reference to `std::codecvt<wchar_t, char, int>::do_out(int&, wchar_t const*, wchar_t const*, wchar_t const*&, char*, char*, char*&) const' bin\boost\libs\program_options\build\libboost_program_options.lib\mingw\debu g\threading-multi\libboost_program_options-mgw-mt-d-1_31.lib(convert.obj)(.r data$_ZTVSt7codecvtIwciE+0x14):C:/CPP/MINGW/include/c++/3.3.1/bits/stl_itera tor_base_funcs.h: undefined reference to `std::codecvt<wchar_t, char, int>::do_unshift(int&, char*, char*, char*&) const' bin\boost\libs\program_options\build\libboost_program_options.lib\mingw\debu g\threading-multi\libboost_program_options-mgw-mt-d-1_31.lib(convert.obj)(.r data$_ZTVSt7codecvtIwciE+0x18):C:/CPP/MINGW/include/c++/3.3.1/bits/stl_itera tor_base_funcs.h: undefined reference to `std::codecvt<wchar_t, char, int>::do_in(int&, char const*, char const*, char const*&, wchar_t*, wchar_t*, wchar_t*&) const' bin\boost\libs\program_options\build\libboost_program_options.lib\mingw\debu g\threading-multi\libboost_program_options-mgw-mt-d-1_31.lib(convert.obj)(.r data$_ZTVSt7codecvtIwciE+0x1c):C:/CPP/MINGW/include/c++/3.3.1/bits/stl_itera tor_base_funcs.h: undefined reference to `std::codecvt<wchar_t, char, int>::do_encoding() const' bin\boost\libs\program_options\build\libboost_program_options.lib\mingw\debu g\threading-multi\libboost_program_options-mgw-mt-d-1_31.lib(convert.obj)(.r data$_ZTVSt7codecvtIwciE+0x20):C:/CPP/MINGW/include/c++/3.3.1/bits/stl_itera tor_base_funcs.h: undefined reference to `std::codecvt<wchar_t, char, int>::do_always_noconv() const' bin\boost\libs\program_options\build\libboost_program_options.lib\mingw\debu g\threading-multi\libboost_program_options-mgw-mt-d-1_31.lib(convert.obj)(.r data$_ZTVSt7codecvtIwciE+0x24):C:/CPP/MINGW/include/c++/3.3.1/bits/stl_itera tor_base_funcs.h: undefined reference to `std::codecvt<wchar_t, char, int>::do_length(int const&, char const*, char const*, unsigned) const' bin\boost\libs\program_options\build\libboost_program_options.lib\mingw\debu g\threading-multi\libboost_program_options-mgw-mt-d-1_31.lib(convert.obj)(.r data$_ZTVSt7codecvtIwciE+0x28):C:/CPP/MINGW/include/c++/3.3.1/bits/stl_itera tor_base_funcs.h: undefined reference to `std::codecvt<wchar_t, char, int>::do_max_length() const' Regards, Janusz

Janusz Piwowarski wrote:
Hello,
I attach a diff for parsers.cpp which avoids error in my previous message, but now linker claims :(
bin\boost\libs\program_options\build\libboost_program_options.lib\mingw\deb u g\threading-multi\libboost_program_options-mgw-mt-d-1_31.lib(convert.obj)(. r data$_ZTVSt7codecvtIwciE+0x10): In function `ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwS3_S3_': C:/CPP/MINGW/include/c++/3.3.1/bits/stl_iterator_base_funcs.h: undefined reference to `std::codecvt<wchar_t, char, int>::do_out(int&, wchar_t const*, wchar_t const*, wchar_t const*&, char*, char*, char*&) const'
That's underfined reference to std:: symbols. Looks like mingw simple does not have wide io at all. Could you please build and run libs/config/test/config_info and send me the output? - Volodya
participants (2)
-
Janusz Piwowarski
-
Vladimir Prus