Oui, cette syntaxe-là fonctionne, car elle est strictement équivalente à :
std::tuple<int, char, double> t(0, 'a', 0.0);
On peut aussi initialiser un tuple en lui affectant un tuple temporaire :
std::tuple<int, char, double> t = std::tuple<int, char, double>(0, 'a', 0.0);
Ce n'est vraiment que lorsqu'on essaye d'initialiser un tuple en lui affectant une liste en {} que ça ne fonctionne pas.
C'est dommage, ça aurait permis quelques raccourcis syntaxiques sympathiques, comme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
std::tuple<int, char, double> foo(std::tuple<int, char, double> t)
{
//... do something
return {4, 'b', 6.0};
}
int main()
{
int i = 0;
char s = 'a';
double d = 3.14;
std::tuple<int, char, double> t = foo({i, s, d});
} |
Partager