右辺値参照パラメーターを受け入れる関数を定義すると、次のようになります。
template <typename T>
void fooT(T &&x) {}
GCC 4.5 を使用してa
、 、ar
、またはのいずれかで呼び出すことができarr
ます。
int a, &ar = a, &&arr = 7;
fooT(a); fooT(ar); fooT(arr);
ただし、同様の非テンプレート関数を呼び出すと、
void fooInt(int &&x) {}
これら 3 つの引数のいずれを使用しても失敗します。の知識を強化する準備をしていたのforward
ですが、これでコースから外れてしまいました。おそらくそれは GCC 4.5 です。A Brief Introduction to Rvalue Referencesの最初の例でもコンパイル エラーが発生することに驚きました。
A a;
A&& a_ref2 = a; // an rvalue reference