
David Abrahams wrote:
On Dec 8, 2009, at 7:06 AM, Jeffrey Bosboom wrote:
David Abrahams wrote:
On Dec 8, 2009, at 6:28 AM, Frédéric Bron wrote:
I prefer void because it is shorter but this could make people think it will check for operator return void... which is not the case; so maybe the long version boost::type_traits::any_return is better. By that rationale shouldn't we also require the 3rd parameter to be wrapped in is_convertible_to<...> so people don't think it's requiring a return type of exactly R (e.g. bool)? Would this also allow a user to override this behavior when they want to ensure an exact type match?
I suppose so, but seriously, I was not suggesting adding all this complication. I think it should be kept simple and only generalized as far as is proven necessary by real use cases.
I don't have a personal need for this, but I was thinking that it might be useful in generic code that can use multiple number types. Suppose you have a some_number class that has a converting constructor from long. Your generic code might want to ensure that if you add two some_numbers (a + b) that you get back a some_number, not a long that's convertible to a some_number. I'm not sure this is entirely necessary, and there may be other mechanisms for the user to specify this constraint when it is required. --Jeffrey Bosboom