我在我的下面幾行代碼:Boost的is_any_of會導致編譯警告?
std::vector<std::string> lines;
boost::split(lines, output, boost::is_any_of("\n"));
凡output
是const std::string
。
當我編譯,我得到一個錯誤: error: implicit conversion changes signedness: 'typename range_difference<iterator_range<const char *> >::type' (aka 'long') to 'std::size_t' (aka 'unsigned long') [-Werror,-Wsign-conversion] std::size_t Size=::boost::distance(Range);
這源於
boost::split(lines, output, boost::is_any_of("\n"));
^
好像在提升內部打字錯誤? 之前有人遇到過這個嗎?
注意:使用gcc版本5.3.1 20160406(Red Hat 5.3.1-6)進行編譯時,大多數警告標誌設置爲和-Werror。注意2:正如@sehe所示,這確實是一個提升問題。 所以讓我改變這個問題 - 有誰知道這個解決方法嗎?
謝謝!
什麼是'output'?什麼是'線條',真的嗎?因爲你如何分割...字符串集合? (換句話說,創建一個[SSCCE](http://sscce.org/)或[MCVE](https://stackoverflow.com/help/mcve)) – sehe
幾乎不可能在沒有警告的情況下使用boost編譯某些內容由增強膽子引起。它看起來像有人忘了在'std :: size_t Size = :: boost :: distance(Range);'中使用static_cast。 – VTT
@VTT這是一個奇怪的聲明。我猜你正在使用MSVC,在這種情況下,你可以包含一個頭來禁用這些警告。 PS。你重現了錯誤嗎?你有一個SSCCE/MVCE repro? – sehe