Простой вопрос, почему не работает следующее (подразумевается копия ci
)?
#include
int main(){
const int ci = 2;
std::forward(ci);
}
prog.cpp: В функции 'int main ()':
prog.cpp: 6: 23: error: нет соответствия функция для вызова 'forward (const int &)'
Проблема проявилась при написании некоторых шаблонов, где у меня есть простой тип держателя, как показано ниже. Чтобы избежать ненужных копий, я по возможности использую идеальную пересылку, но, похоже, в этом и заключается корень проблемы.
template
struct holder{
T value;
holder(T&& val)
: value(std::forward(val))
{}
};
template
holder hold(T&& val){
// T will be deduced as int, because literal `5` is a prvalue
// which can be bound to `int&&`
return holder(std::forward(val));
}
template
void foo(holder const& h)
{
std::tuple t; // contrived, actual function takes more parameters
std::get<0>(t) = std::forward(h.value); // h.value is `const T`
}
int main(){
foo(hold(5));
}
Если потребуется дополнительная информация, дайте мне знать.
Мы приветствуем любую идею обойти эту проблему.