У меня есть требование, при котором кортеж должен быть инициализирован следующим образом. Как создать кортеж, содержащий объект класса A?Как инициализировать кортеж с заданным классом без конструктора копирования
#include <iostream>
#include <tuple>
using namespace std;
class A{
int a;
public:
A(const A&)=delete;
A(int a): a(a){}
};
std::tuple<A>& createTuple(A &&a){
return std::make_tuple<A>(std::forward<A>(a));
}
int main(){
std::cout << std::get<0>(createTuple(std::forward<A>(A(1))));
}
Я не могу изменить класс А каким-либо образом.
Что вы _actually_ пытаетесь сделать, и каковы ваши _actual_ ограничения? Я имею в виду, мы можем, вероятно, вывести/угадать его из вашего кода в этом случае, но вы должны использовать _words_, чтобы объяснить это, чтобы этот вопрос был доступен для поиска и повторного использования и ясен. –
'std :: forward' не работает так, как вы думаете, он работает. В вашем случае вам не нужно 'std :: forward' где угодно. – bolov
также в 'createTuple' вы пытаетесь вернуть ссылку lvalue на временный объект. I – bolov