пустота(ос < Что означает пустота в этом контексте?

#c

Вопрос:

Я читал о сворачивании выражений и нашел пример того, что использовалось до сворачивания выражений:

 template lt;class... Tsgt; void print_all(std::ostreamamp; os, Ts constamp;... args) {  using expander = int[];  (void)expander{0,  (void(os lt;lt; args), 0)...  }; }  

Проблема void(os lt;lt; args) в том, что немного. Что означает пустота в этом контексте? Я уже пытался найти это, но это довольно общий подход.

Спасибо, что уделили мне время.

Комментарии:

1. С выражениями сгиба вам больше не нужен этот трюк.

Ответ №1:

Он приводит результат (os lt;lt; args) к void . Это оно.

Этот стиль используется для предотвращения очень редкой перегрузки , оператора (запятой), поскольку теоретически lt;lt; он может быть перегружен для определяемого пользователем args аргумента и возвращать то, что перегружало оператор запятой для X, 0 выражения. Это может нарушить трюк с инициализацией. Таким образом, код безопасен, и запятая всегда используется в качестве обычного оператора последовательности.