当前位置: 首页 > 知识库问答 >
问题:

在C++中,'auto'可以用作lambda参数的子类型吗?

范高刚
2023-03-14
#include <vector>
#include <iostream>

int main()
{
    auto make_vector = []( std::initializer_list<auto> v ) 
        { return std::vector<typename decltype(v)::value_type>{v}; };
    auto v = make_vector( {1,2} );
    std::cout << v[0] << ' ' << v[1] << '\n';
}

共有1个答案

宗政英才
2023-03-14

看起来像是GCC中的一个bug。很难,它说它已经在你使用的GCC版本中解决了...

您可以在这里阅读更多关于为什么不能在此上下文中使用auto的信息。

有人正确地向我指出,这种情况是针对一个函数参数的。在C++20中还是不允许的,看这个答案。

 类似资料:
  • 我正在学习C 17非类型模板参数的新功能。我编写了一个简单的代码片段,如下所示: 据我所知,福 但是,语句使用clang、MSVC 19.27编译,但在GCC 10.2、MSVC 19.25编译时失败。 我的问题是:为什么编译器的行为不同?标准对此有何规定? 链接到编译器资源管理器: 叮当声https://godbolt.org/z/66M695 海湾合作委员会https://godbolt.or

  • 在以下模板的定义中,lambda用作非类型模板参数的默认值,并且在lambda的主体中定义了一些类型: Clang和MSVC对此定义没有异议,但GCC抱怨: 错误:“

  • 在TypeScript中,我可以将函数的一个参数声明为类型函数。是否有一种“类型安全”的方式来完成这件事,而这是我所缺少的?例如,考虑以下内容: save回调不是类型安全的,我给它一个回调函数,其中函数的参数是一个字符串,但我传递给它一个数字,并且编译时没有错误。我可以在保存类型安全函数中设置结果参数吗? TL;DR版本:在TypeScript中是否存在与.NET委托等价物?

  • 这样可以采用类型或类型(但是,我不希望的类型可能是或或在我的程序中没有意义的东西)。 这可能吗?

  • 所有人。 在Oracle关于缩减的教程(https://docs.Oracle.com/javase/tutorial/collections/streams/Reduction.html)中,我们提供了如何使用stream.collect()方法的示例。任务是查找流中值的平均值。本例中有辅助类平均器: 然后我们就有了这样的结果: ,其中BiConsumer-具有函数方法accept(Object

  • 我发现gcc和clang允许在非类型模板参数类型子句中使用。例如: [live demo gcc][live demo clang] 它是符合标准的功能还是一些gnu扩展?