http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45924
Summary: [4.5/4.6 Regression] [C++0x] bind<R>(x)(y, z) fails
Product: gcc
Version: 4.5.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: [email protected]
ReportedBy: [email protected]
Notice while working on PR 45893, this fails:
#include <functional>
struct f
{
int operator()(int, int) { return 0; }
};
void test01()
{
int i = 0;
using namespace std::placeholders;
std::bind<int>(f(), _1, _2)(i, i);
}
int main()
{
test01();
return 0;
}
In file included from bind.cc:1:0:
/home/redi/gcc/4.5/lib/gcc/x86_64-unknown-linux-gnu/4.5.2/../../../../include/c++/4.5.2/functional:
In member function ‘result_type std::_Bind_result<_Result, _Functor(_Bound_args
...)>::operator()(_Args&& ...) [with _Args = {int&, int&}, _Result = int,
_Functor = f, _Bound_args = {std::_Placeholder<1>, std::_Placeholder<2>},
result_type = int]’:
bind.cc:12:35: instantiated from here
/home/redi/gcc/4.5/lib/gcc/x86_64-unknown-linux-gnu/4.5.2/../../../../include/c++/4.5.2/functional:1327:31:
error: no matching function for call to ‘forward(int&)’
The reason is a misplaced template parameter pack expansion:
tuple<_Args...>(std::forward<_Args...>(__args)...),
^^^
It should be:
tuple<_Args...>(std::forward<_Args>(__args)...),
This is a regression against the version of std::bind in 4.4