传递从istreambuf_iterator构造的std :: vector <char>

gal*_*tte 1 c++ gcc stl c++11

我有以下代码:

std::ifstream ifs(fileName, std::ios_base::in | std::ios_base::binary);
std::vector<char> vecdata(std::istreambuf_iterator<char>(ifs), 
                          std::istreambuf_iterator<char>());
image->setData(std::move(vecdata));
Run Code Online (Sandbox Code Playgroud)

setData声明如下:

void Image::setData(std::vector<char> && data);
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

reader.cpp:752:错误:没有匹配的调用函数

'image :: setData(std :: vector(&)(std :: istreambuf_iterator>,std :: istreambuf_iterator>(*)()))'

image->setData(std::move(vecdata));
                                 ^
Run Code Online (Sandbox Code Playgroud)

候选人是:

image.h:12:void Image :: setData(std :: vector &&)

我正在使用gcc 4.91

MCVE与gcc 5.4,行为相同:http://rextester.com/QYA50737

这是一个gcc bug吗?

谢谢

Jar*_*d42 5

你有最多Vexing Parse:使用{}而不是():

std::vector<char> vecdata{std::istreambuf_iterator<char>(ifs), 
                          std::istreambuf_iterator<char>()};
Run Code Online (Sandbox Code Playgroud)