我正在尝试查看是否可以使用在 lambda 中不可默认构造的参数作为折叠表达式的一部分。T
如果默认可构造,则以下代码有效。
template <typename ...T>
struct X
{
void foo()
{
([](const T&)
{
if (sizeof(T) < 4)
{
std::cout << "Small block size: " << sizeof(T) << std::endl;
}
}(T{}), ...);
// Print sizes
((std::cout << sizeof(T) << std::endl), ...);
}
};
struct A {
int a[100];
};
struct B
{
};
int main()
{
X<A,B> x;
x.foo();
}
输出
Small block size: 1
400
1