C++ Boost';有任何原因引起警告吗?

C++ Boost';有任何原因引起警告吗?,c++,boost,C++,Boost,我的代码中有以下行: std::vector<std::string> lines; boost::split(lines, output, boost::is_any_of("\n")); 看起来像是boost中的内部键入错误? 以前有人遇到过这种情况吗 注:使用gcc版本5.3.1 20160406(Red Hat 5.3.1-6)编译时,设置了大多数警告标志,并且-Werror 注2:正如@sehe所显示的,这确实是一个提升问题。 那么让我来改变这个问题——有人知道这方面的解

我的代码中有以下行:

std::vector<std::string> lines;
boost::split(lines, output, boost::is_any_of("\n"));
看起来像是boost中的内部键入错误? 以前有人遇到过这种情况吗

注:使用gcc版本5.3.1 20160406(Red Hat 5.3.1-6)编译时,设置了大多数警告标志,并且-Werror

注2:正如@sehe所显示的,这确实是一个提升问题。 那么让我来改变这个问题——有人知道这方面的解决方法吗

谢谢

(GCC)和(叮当声)

#包括
#包括
#包括
#包括
#包括
int main(){
std::字符串输出;
std::矢量线;
boost::split(行、输出、boost::是(“\n”)中的任意一个);
}

这应该报告给Boost算法的维护人员(请参阅Boost邮件列表或)

鉴于此问题没有更多的活动,我会说“是”——这是一个Boost问题。它很容易用@sehe的MCVE复制。 显然,用严格的警告和Werror标志编译boost是不可能的

根据我的解决方案,我有一个相当简单的用例,并且实现了我自己的简单版本的split

inline std::vector<std::string> Split(const std::string &str, char delim)
{
  std::vector<std::string> out;
  std::stringstream ss(str);
  std::string item;
  while (std::getline(ss, item, delim)) {
      out.push_back(item);
  }
  return out;
}
inline std::vector Split(const std::string&str,char delim)
{
std::向量输出;
std::stringstream ss(str);
std::字符串项;
while(std::getline(ss,item,delim)){
向外。推回(项目);
}
返回;
}

什么是
输出
?什么是
,真的吗?因为你怎么分一个。。。字符串集合?(换句话说,制作一个or)使用boost编译一些东西时,如果没有boost胆量引起的警告,几乎是不可能的。似乎有人忘记在
std::size\u t size=::boost::distance(Range)中使用static_cast@VTT这是一个奇怪的说法。我猜你正在使用MSVC,在这种情况下,你可以包含一个标题来禁用这些警告。还有,你再现了错误吗?你有一个SSCCE/MVCE要谴责吗?@不朽你能做一个或@sehe我想说的是,MSVC有点放纵(而且通常在boost中用#pragma警告来压制),发出的警告比clang和gcc少。你没有添加
-Wsign conversion
@VTT-Ah。你说得很对。OP可能特别提到了这一点。是的,我同意这是一个需要报告的问题。
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string.hpp>
#include <vector>
#include <string>

int main() {
    std::string output;
    std::vector<std::string> lines;
    boost::split(lines, output, boost::is_any_of("\n"));
}
inline std::vector<std::string> Split(const std::string &str, char delim)
{
  std::vector<std::string> out;
  std::stringstream ss(str);
  std::string item;
  while (std::getline(ss, item, delim)) {
      out.push_back(item);
  }
  return out;
}