Здравствуйте, Went, Вы писали:
W>Ничего не понял. У меня задача не получить lvalue из чего угодно, а сгенерировать временный lvalue-объект, уникальный для каждого вызова. То есть, чтобы было что-то наподобие
W>W>foo(discard<int>())
W>
W>Но в идеале без <int> (хотя это вряд ли достижимо без граблей) и с минимальным оверхедом по синтаксису и производительности.
Самое простое, что сразу приходит в голову:
template<typename T>
struct discarding_arg
{
T _tmp;
public:
operator T&() &&
{
return _tmp;
}
};
void f(int & i) {
i = 0;
}
int main()
{
f(discarding_arg<int>{});
}