c++ - Why can't I use operator bool() for std::ofstream -


why can't write following code?

#include <fstream> #include <string>  bool touch(const std::string& file_path) {     return std::ofstream(file_path, std::ios_base::app); }  int main() {     touch("foo.txt"); } 

output

prog.cpp: in function 'bool touch(const string&)': prog.cpp:6:52: error: cannot convert 'std::ofstream {aka std::basic_ofstream<char>}' 'bool' in return   return std::ofstream(file_path, std::ios_base::app); 

http://ideone.com/iharad

i know std::fstream's operator bool() defined explicit don't see reason why should fail in such case. there's no intermediate conversion, temporary std::ofstream object , bool. what's reason?

it's exactly because operator bool() defined explicit can't use in way. context explicit operator bool() automatically invoked unambiguous conditionals, such if () while(), ?: , middle expression of for ().

if want convert std::ofstream bool return value, must use static_cast<bool>() or equivalent.


Comments