C ++ 17 fois l’expression en cout

J’apprends la nouvelle expression de pliage 17 ++ et j’ai vu ce code à partir de l’ expression de pliage 17 ++ . J’aimerais savoir pourquoi ce code fonctionne:

template void printer(Args&&... args) { (std::cout << ... << args) << '\n'; } 

mais pas celui-ci:

 template void printer(Args&&... args) { (std::cout << args << ...) << '\n'; } 

ce qui pourrait sembler logique aussi et inverserait l’ordre d’impression à mon avis.

Comme on le voit sur cppreference , les plis binarys peuvent avoir les deux formes suivantes:

Capture d'écran de cppreference / fold

E est l’ expression du pack et I est l’ expression d’initialisation .


Il n’y a pas de pli binary correspondant à votre (std::cout << args << ...) , qui a la forme de (I op E op ...) .