O reinterpret_cast (ou qualquer conversão) converte xvalues em lvalues?

O código a seguir é legal (pelos padrões C ++ 11 e / ou C ++ 14)?

#include <iostream>
#include <utility>

using namespace std;

void foo(int &a) {
    cout << a << endl;
}

int main() {
    foo(reinterpret_cast<int &>(move(5)));
}
Se sim, é um comportamento indefinido?Se não é um comportamento indefinido, posso até mudara dentrofoo sem se tornar UB?

Compila no clang 3.5, não no gcc 4.9. Erro no GCC:

➤ g++-4.9 -std=c++1y sample.cpp -o sample                                                                                        
sample.cpp: In function 'int main()':
sample.cpp:11:40: error: invalid cast of an rvalue expression of type 'std::remove_reference<int>::type {aka int}' to type 'int&'
     foo(reinterpret_cast<int &>(move(5)));
                                        ^
EDITAR

FYI, um elenco feito sob medida que é menos cabeludo que o anterior e que funciona no C ++ 11 para o GCC e o Clang, seria o seguintelvalue função:

#include <iostream>

namespace non_std {
    template <typename T>
    constexpr T &lvalue(T &&r) noexcept { return r; }
}

void divs(int &a, int &b) {
    int t = a;
    a /= b;
    b /= t;
}

int main() {
    using namespace std;
    using namespace non_std;

    int i_care_for_this_one = 4;
    divs(i_care_for_this_one, lvalue(2));
    cout << i_care_for_this_one << endl;
}

questionAnswers(3)

yourAnswerToTheQuestion