コンパイラがテンプレートのインスタンス化に関する警告を私に与える理由はわかりません。std :: forwardテンプレート付きオーバーロード関数
はうまく動作し、適切に左辺値/右辺値を出力コードの一部厥:
//template<typename T>
void overloaded(const /*T*/std::string& in)
{
std::cout << "lvalue" << std::endl;
}
//template<typename T>
void overloaded(/*T*/std::string&& in)
{
std::cout << "rvalue" << std::endl;
}
template<typename T>
void pass(T&& in)
{
overloaded(std::forward<T>(in));
}
int main()
{
std::string a;
pass(a);
pass(std::move(a));
getchar();
}
をしかし、私は、テンプレートの種類とそれを使用する必要があります。だから、
template<typename T>
void overloaded(const T& in)
{
std::cout << "lvalue" << std::endl;
}
template<typename T>
void overloaded(T&& in)
{
std::cout << "rvalue" << std::endl;
}
に「オーバーロードされた」の機能を変更するには、テンプレートのインスタンスの警告、(私にはその明確なTははstdする必要があります::文字列)を与えると、コンソールは、最初の左辺値の2倍の代わりに、右辺値を出力します。私が間違っているのは何
?
私のために働きます。 http://coliru.stacked-crooked.com/a/fc00c140c9a8e208 – erip
'T &&'は転送参照です。つまり、 'T'が型テンプレートパラメータであれば、それはもはや通常の参照値ではありません –