My header file contains a class that holds a Boolean and a string
#ifndef RESULT_P
#define RESULT_P
#include <string>
#include <utility>
class MyResult {
public:
    MyResult() = default;
    MyResult( const bool& ok, std::string  msg) : ok_(ok), msg_(std::move(msg)) {}
    explicit MyResult(bool ok) : ok_(ok) {}
    explicit MyResult(std::string msg) : ok_(false), msg_(std::move(msg)) {}
    bool ok() const {
        return ok_;
    }
    void ok(bool ok) {
        ok_ = ok;
    }
    const std::string &msg() const {
        return msg_;
    }
    void msg(const std::string &msg) {
        msg_ = msg;
    }
private:
    bool ok_ { false };
    std::string msg_;
};
#endif
I am using the MyResult(std::string) constructor to create a result that takes by default false on the ok_ method variable.
I am calling
auto result = do_something()
The method do somethings looks like this
   MyResult do_something() {
      if ( something ) {
         //code    } else {
          return MyResult("something wrong happened");    
      }
    }
So returns false and a string. When this method returns and I am calling
cout << result.ok() << endl;
it prints true!!! instead of false. What is wrong?
UPDATE: sorry for my initial version of the post. It prints true, not false.
 
    