The expression is contextually converted to bool; if that conversion is ill-formed, the program is ill-formed.
In the do statement the substatement is executed repeatedly until the value of the expression becomes false. The test takes place after each execution of the statement.