使用auto参数munmap_chunk()返回auto的函数:无效指针
Function returning auto with auto parameter munmap_chunk(): invalid pointer
我正在测试GCC 4.9的新功能(参数中的自动),并发现了一些奇怪的错误。
#include <iostream>
#include <vector>
auto foo(auto v)
{
for (auto&& i : v)
std::cout << i;
}
int main()
{
foo(std::vector<int>{1, 2, 3});
}
这给了我以下错误:
*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0x00007f87f58c6dc0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7e846)[0x7f87f4e4c846]
./a.out[0x400803]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f87f4def76d]
./a.out[0x400881]
此外,如果我做return 0
,我会得到:
main.cpp: In instantiation of 'auto foo(auto:1) [with auto:1 = std::vector<int>]':
main.cpp:13:34: required from here
main.cpp:8:12: error: could not convert '0' from 'int' to 'std::vector<int>'
return 0;
似乎奇怪的是,这两辆汽车被推断为相同。我能做些什么来修复?
请注意,以下操作很好:
auto foo(auto v)
{
return 'a';
}
int main()
{
char c = foo(42);
}
我的测试似乎表明,指针导致返回类型和v被推导为相同。例如CCD_ 2和CCD_。然而,向量是给出误差的那个。
我不认为参数类型可以这样推导——sp2和任何
我相信像这样使用auto
会调用旧的auto
,意思是
(AFAIK,在这种情况下auto
=int
,并且int
不能转换为std::vector
)。
目前它在lambdas 中工作
[](const auto& v)->void{for(auto&&i:v) std::cout<<i;}
但我认为在这种情况下最好的解决方案是编写一个模板
template<typename T>
void foo(const T& t){
for (auto&& i : t)
std::cout << i;
}
相关文章:
- 将函数参数类型声明为 auto
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 返回"auto"的函数在定义之前不能使用
- 警告:函数使用不带尾随返回类型的'auto'类型说明符
- 为什么我不能在递归 lambda 函数中使用 auto
- 错误:使用 auto 调用隐式删除的 unique_ptr 复制构造函数
- C++:在原型中声明"auto"函数返回类型仍然会导致在扣除错误之前使用"auto&quo
- 从函数返回引用是否会导致在使用'auto'时创建新的临时对象?
- C++14 'auto'能够获取函数返回类型,我们还需要 std::result_of<> 吗?
- 为什么在auto和template函数的情况下,类型都没有推导为"const"类型
- auto f = bind(dist<>,gen) 在成员声明C++失败。未被识别为函数
- 没有声明和初始化的类似闭包的函数(即没有'auto f = make_closure();')
- 使用 auto 推导的 lambda 中成员函数的模板
- 如何用'auto'单词推导出哪种类型的参数编写函数?
- 使用新的 C++11 语法的 auto 进行函数声明,但使用 auto&并且没有 ->
- C++构造函数中的'new auto'
- lambda 函数的类型,使用 auto
- lambda 中的跨平台"auto"关键字用法:integral_constant作为函数参数
- 为什么 auto 关键字不能与指向函数的指针的初始化列表一起使用?
- 错误:auto函数的模板声明