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?