折叠表达式中 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;
    }
}(), ...);