I did not try to understand why what's written above does not work, but it seems to me that writing the lambda as this would produce the intended result:
(var(a)[_1])(0) = 1;
Indeed, thanks!
I was just about to answer that this does not solve the general problem of using placeholders as indices as this assumes the array is a left-value. Then I tested and realized that the const version of my original code:
int x = bind(static_cast<std::vector<int>::const_reference (std::vector<int>::*)(std::vector<int>::size_type) const>(&std::vector<int>::operator[]), a, _1)(0);
actually compiles and works. If anyone is knowledgeable about this I'd glad to hear an explanation.
Thanks,
P.