По первой части - жестко туплю, удалил.
Там ссылка на предложенные правки http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0727r0.html (её и в прошлой теме скидывали), я по ним пробежался и чего-то не въехал:
The third context is when a reference is bound to a temporary object. [ Footnote: The same rules apply to initialization of an initializer_list object (8.6.4) with its underlying temporary array. ] The temporary object to which the reference is bound or the temporary object that is the complete object of a subobject to which the reference is bound persists for the lifetime of the reference if the glvalue to which the reference is bound was obtained through one of the following:
...
a const_cast (8.2.11 [expr.const.cast]), static_cast (8.2.9 [expr.static.cast]), dynamic_cast (8.2.7 [expr.dynamic.cast]), or reinterpret_cast (8.2.10 [expr.reinterpret.cast]) converting, without a user-defined conversion, a glvalue operand that is one of these expressions to a glvalue that refers to the object designated by the operand, or to its complete object or a subobject thereof,
...
т.е. S &&s = static_cast<S>(Q), при наличии у Q operator S() - так делать нельзя? Бредом попахивает, но к чему эти слов про user-defined conversion.