اون خطی که گفتید برای unpack کردن variadic template استفاده میشه
شما در حالت معمولی برای این که به مقدار های داخل variadic templateدسترسی داشته باشید باید چند تا تابع بنویسید و بصورت بازگشتی ازشون استفاده کنید
مثلا این جا
با توجه به using قبل از خطی که هست اون کد معادله اینه :
(void)int[]{ 0, ((void)(stream << args << seperator), 0) ... };
خروجی stream<<args<<seprator از نوع ostream& هست
یعنی کد معادل این میشه :
(void)int[]{ 0, ((void)(ostream&, 0) ... };
پس ما الان صرفا داریم یک آرایه رو با initializer list مقدار میدیم
2 تا void ّبرای این گزاشته شدن که کامپایلر راحت تر این کد رو optimize کنه و آرایه رو حذف کنه پس کد معادل این میشه
int[]{ 0, (ostream&, 0) ... };
عبارت (ostream&, 0) همیشه مقدار 0 رو برمیگردونه .(عملگر , )
پس در مجموع کدی که میمونه فقط یک آرایه معمولی با اعضای 0 میسازه .
int[]{ 0, 0 };