Что означает передача объектов в скобках после типа структуры, когда он не ссылается на атрибуты структуры или аргументы своего собственного конструктора.
template <class... Ts> // (1)
struct Print : Ts... {
using Ts::operator()...;
};
template <class... Ts> // (1)
auto MakePrint(Ts... ts) {
return Print<Ts...>{ts...};
}
ts...
в последней строке, выполнение этого кода без него дает точно такой же результат, но я не понимаю, почему он компилируется: s
Единственные две интерпретации, которые я знаю об использовании скобок, - это установить атрибуты структуры или вызвать конструктор структуры
Но в этом случае, например, с:
auto m = MakePrint ([](int i){ return i + 1;});
Это эквивалентно:
auto MakePrint (typeof(lambda) lambda) {
return Print<typeof(lambda)>{lambda};
}
и Печать определяется следующим образом:
struct Print : typeof(lambda) {
auto operator() (int i) { return i + 1; }
}
и так куда же попадает лямбда-объект внутри скобок (возврат Print<typeof(lambda)>{lambda};
)?