折叠表达式中 lambda 中的非默认可构造参数
non default constructible parameters within lambdas in fold expressions
我正在尝试查看是否可以在 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
lambda 不需要参数:
([]{
if (sizeof(T) < 4)
{
std::cout << "Small block size: " << sizeof(T) << std::endl;
}
}(), ...);
我正在尝试查看是否可以在 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
lambda 不需要参数:
([]{
if (sizeof(T) < 4)
{
std::cout << "Small block size: " << sizeof(T) << std::endl;
}
}(), ...);