A question, both payment_address and stealth_address have a "valid_" value. When you typecast a payment_address or stealth_address object to boolean, you get a copy of that valid_ property.
It seems to simply say if the class has been successfully initialized, some of the failure cases in constructors - e.g. failed string deserialization - lead to using the () constructor, and unlike all other constructors, that one sets valid_ to false.
Is having a valid_ property an overall LibBitcoin convention?