explicit operator bool von std::istream::sentry



  • hallo leute,

    ich hab zwei sentry object:

    std::istream::sentry ok1(my_istream1);
    std::istream::sentry *ok2 = new std::istream::sentry(my_istream2);
    

    warum funktioniert das:

    auto get_sentry1(void) const -> bool
    {
       return ok1;
    }
    

    aber das nicht:

    auto get_sentry2(void) const -> bool
    {
       return *ok2;
    }
    

    ?
    bekomm den fehler:

    error C2440: "return": "std::basic_istream<char,std::char_traits<char>>::sentry" kann nicht in "bool" konvertiert werden
    

    irgendwie steh ich grad auf der leitung

    danke

    Meep Meep



  • Hallo,

    der Konvertierungsoperator von std::istream::sentry zu bool ist explicit (Quelle); du brauchst also einen expliziten Cast.
    Dass get_sentry1 so kompiliert, liegt wahrscheinlich daran, dass MSVC hierbei nicht standardkonform ist.

    LG


Log in to reply