Проблема
Ваша функция f1()
нуждается в lvalue для аргумента, переданного по ссылке.К сожалению, неявное преобразование создает временное значение, которое нельзя использовать в качестве lvalue.Это вызывает сообщение об ошибке C2664 .
Решение
Вам просто не нужно пытаться ссылаться на временное значение, полученное в результате преобразования, определяя вашу функцию как
Template2<Class> f1(const Template2<Class>& t2) { // const & can be used for temp
return Template1<Subclass>();
}
или, лучше, как
Template2<Class> f1(Template2<Class>&& t2) { // && is meant for exactly such cases
return Template1<Subclass>();
}
У вас может быть даже два таких конструктора, один для ссылок lvalue &
и один для ссылок rvalue &&
, если это может быть важно для изменения.Здесь онлайн демо