To me the only clumsy thing is that you have to supply those ugly arguments to the want() function. It might be nicer to have something like is_rvalue() and is_lvalue() aliases to get to that functionality. I'm not sure what else you could do to make it less clumsy, did you have anything else in mind?