auto によって束縛される変数の型(出題編)

追記:
問題を追加して整理しました。
コメントにあった auto && に関しては、また後ほど触れたいと思います。

C++0x において、以下のコード

int   f();
int&  g();
int&& h();

int main()
{
  auto x0 = 0;

  int i = 1;
  auto x1 = i;

  int const j = 2;
  auto x2 = j;

  int a[3];
  auto x3 = a;

  int const b[] = { 1, 2, 3, 4 };
  auto x4 = b;

  auto x5 = f();
  auto x6 = g();
  auto x7 = h();

  auto x8 = f;

  auto x9 = { 1, 2, 3 };
}

における変数 x0 〜 x9 の定義を、今の定義と等価になるよう auto を使わない形で書き換えなさい。
ただし C++0x の言語仕様は 2011 年 2 月現在における最新ドラフト(N3225)によるものとします。