1
의 내가이를 rvalue 참조를 복용하는 기능을 가지고 있다고 가정 해 봅시다 :std :: bind'ed 함수로 이동해야하는 이유는 무엇입니까?
void whatever (std::unique_ptr<int>&&) {
// Nothing!
}
... 그리고 나는 자리에 그 하나 개의 매개 변수를 바인딩합니다.
auto f = std::bind(&whatever, _1);
나는 이런 식으로 호출을 시도, 그 결과는 내가 기대 한 것과 반대입니다.
std::unique_ptr<int> nothing;
f(std::move(nothing)); // Fails to compile!
f(nothing); // Works, but seems wrong!
이것은 컴파일러 버그입니까? 또는 작업 호출이 안전하지 않은 코드입니까? 또는 왜 내가 바운드 함수에 std::move
포인터가 필요하지 않은가?
gcc4.4와 컴파일 에러는, 그런데,이다 : libc++를 사용하는 경우 나 그 반대 결과를 얻을 수
test.cxx:14: error: no match for call to '(std::_Bind<void (*(std::_Placeholder<1>))(std::unique_ptr<int, std::default_delete<int> >&&)>) (std::unique_ptr<int, std::default_delete<int> >)'
흥미 롭습니다! 제가 작업하고있는 더 복잡한 경우가 있습니다. 결과는 주변 코드의 일부 부작용에 의존하는 것 같습니다. –
그래, GCC 4.7에서 수정 된 것 같습니다. – Potatoswatter
그건 그렇고, [func.bind.bind]/p10/b3에 대한 참조는 어떻게 찾습니까? 그것은 Google을 잘하지 않습니다. –