Yeah, I tested it some more myself and the second one actually worked in a limited test case; turns out the problem I was having was somewhere else. I am now using your solution for the first technique though; it seems a little better.
Next problem I'm having though is using it with an erasure that can be used to store anything implementing insert and count as in a std::unordered_set. I've tried the following simple test, but it seems to have trouble converting between 'int' and the '_value' placeholder type.
Again, thanks for all of your patient help. I've learned a lot.