2
#include<iostream>
template<class T>
struct Foo
{
T v_;
Foo(T&& v):v_(std::forward<T>(v))
{
std::cout << "building Foo..\n";
}
};
int main()
{
int v;
Foo<int> foo(v);
std::cin.ignore();
}
のVisual C++ 2010の出力:下右辺値参照に左辺値を結合MSVS2010
エラーC2664:
'Foo<T>::Foo(T &&)'
は:'int &&'
へ'int'
からパラメータ1を変換することはできませんが、それは正常なことですI左辺値を右辺値参照にバインドできませんか?
EDIT:関数の
同じこと:
void f(int && v)
{
}
int v;
f(v); //won't compile
私はSTDだと思うので、私は少し混乱しています::前方には、メソッドを使用して呼び出された場合に検出することが便利です左辺値または右辺値リファレンス。 しかし、左辺値を右辺値の参照にバインドすることはできないようです...少なくともテンプレートパラメータはありませんが、わかりません。
はい、正常です。参照崩壊ルールは、コンストラクタ自体がテンプレートの場合にのみ適用されます。 – ildjarn
@ildjarn:ありがとう、その理由を知っていますか? – Guillaume07
コンテキストに関係なく常にrvalue-reference構文に参照縮退規則が適用されている場合は、本当に有用ではない真のrvalue-referenceを具体的に示すことはできません。 – ildjarn