Ответ 1
Причина отклонения cast (int &) 0 заключается в том, что вы пытаетесь использовать литерал как ссылку, которая на самом деле не имеет смысла. И оператор ожидает эталон состояния значения, и вы не можете ссылаться на буквальном. Компилятор видит, что вы производите литерал как rvalue, следовательно main.cpp:2:11: error: invalid cast of an rvalue expression of type 'int' to type 'int&'
Этот вопрос действительно не сводится к иерархии приведений, но вместо этого неспособность лить литералы в качестве ссылок.
Редактирование: Быстрая заметка, я немного смущен вашей формулировкой, const_cast<int&>(static_cast<const int&>(0));
принятый компилятором? Это не должно из-за литья lvalue как rvalue. Если так, то я, должно быть, неправильно понял вопрос, и я откажусь от ответа.