How does if(serial) work, a c++ question
It's not the constructor that's returning the value, it's the bool operator:

Uno:

HardwareSerial::operator bool() {
    return true;
}


Leonardo:

Serial_::operator bool() {
    bool result = false;
    if (_usbLineInfo.lineState &gt; 0)
        result = true;
    delay(10);
    return result;
}


When you use the object in a setting where a boolean value is expected of it (e.g., if, while etc.) the bool() operator is called (if it exists) and that value is used.

More specifically, the bool() operator is called when the object is being cast to a bool type, either implicitly (as in if...) or explicitly (as in ... = (bool)Serial;).

More on C++ class operators here: http://en.cppreference.com/w/cpp/language/operators