次の不自然な (そして、ひどい) 例を考えてみます。
template<typename... Args>
void something(Args... args)
{
std::tuple<Args...> tuple; // not initializing for sake of example
std::get<0>(tuple) = 5;
}
次のように呼び出すと機能します。
int x = 10;
something<int>(x);
ただし、次のように呼び出すと機能しません。
int x = 10;
something<int&>(x);
5 への代入のため。何らかの理由でタプルが定義されているときにタプルを初期化できないと仮定すると、型を参照として指定するときにこれを機能させるにはどうすればよいでしょうか?
具体的には、 isのstd::tuple<int>
場合でもタプルをしたいと思います。Args...
int&
これの実際のユースケースには、文字列をタプルに逆シリアル化することが含まれます。ここでArgs...
、タプルをアンパックすることによって呼び出される関数へのパラメーターの型です。関数が参照によってパラメーターを受け取る場合を除いて、すべてうまく機能します。
私は gcc 4.5.2 を使用していますが、このコンパイラにはまだ実装されていない回答を受け入れます。