Array rvalues can be constructed by accessing array members of a class rvalues or by using an identity template:
#include <iostream>
void f(int (&&x)[2][3]) { std::cout << sizeof x << '\n'; }
struct X { int i[2][3]; } x;
template<typename T> using identity = T;
int main()
{
f(X().i); f(identity<int[][3]>{{1,2,3},{4,5,6}}); }
Why not just accept initializer lists though?