error: call of overloaded 'basic_ofstream(int)' is ambiguous

67 Views Asked by At
std::shared_ptr<std::ostream> out_stream(const std::string &fname)
{
  if (fname.length() > 0)
  {
    if ((fname.compare("stderr") == 0) || (fname.compare("cerr") == 0))
    {
      std::shared_ptr<std::ostream> p(&std::cerr, [](std::ostream*){});
      return p;
    }
    if ((fname.compare("stdout") == 0) || (fname.compare("cout") == 0))
    {
      std::shared_ptr<std::ostream> p(&std::cout, [](std::ostream*){});
      return p;
    }
    if ((fname.compare("null") == 0) || (fname.compare("/dev/null") == 0))
    {
      std::shared_ptr<std::ostream> p(new std::ofstream(0));//<<<<<<<<<<<<<<<<<<<<<
    }
    std::shared_ptr<std::ostream> p(new std::ofstream(fname));
    io_utils_logger.log(utils::LogLevel::FILE, "opening a file ", fname, "\n");
    return p;
  }
  else
      {
    std::shared_ptr<std::ostream> p(new std::ostream(std::cout.rdbuf()));
    return p;
  }
}

In the above source code, in the marked line, new std::ofstream(0) is showing the following error:

error: call of overloaded 'basic_ofstream(int)' is ambiguous
         std::shared_ptr<std::ostream> p(new std::ofstream(0));
                                                           ^

How can I fix it?

0

There are 0 best solutions below