Depending on the order of creating the objects, the arguments of the overridden operator, what will be the output of the following code?
#include <memory>
#include <iostream>

class SomeObj
    SomeObj() {}
    SomeObj(const int& val)  : val_(std::make_shared<int>(val))
        std::cout << *val_;
    void set(const int& val)
        val_ = std::make_shared<int>(val);
    friend bool operator&&(const SomeObj&, const SomeObj&);
    std::shared_ptr<int> val_;

bool operator&&(const SomeObj& lhs, const SomeObj& rhs)
     return lhs.val_ && rhs.val_;

int main() {
    if (SomeObj(1) && SomeObj(2)) {
        std::cout << 3;
    return 0;
The order of construction of SomeObj(1) and SomeObj(2) for user defined functions (including the overloaded operators) is not defined.

Слідкуй за CodeGalaxy

Мобільний додаток Beta

Get it on Google Play
Зворотній Зв’язок
Зареєструйся Зараз
або Підпишись на майбутні тести