Следующее может компилироваться под c ++ 17
template<class... Ts>
struct Test : Ts...
{
using Ts::operator()...;
};
template<class... Ts> Test(Ts...) -> Test<Ts...>;
int main() {
Test test
{
[](const int& i) { },
[](const float& f) { }
};
}
Но если я изменю его на:
Test test
( //{ is changed to (
[](const int& i) { },
[](const float& f) { }
);//} is changed to )
Это не скомпилируется, потому что Test не имеет такого конструктора, которыйпринять 2 параметра. Мне интересно, почему оригинальный код работает?