
Steven Watanabe wrote:
Tobias Schwinger wrote:
What's wrong with the tag types (other than personal taste) in the first place?
Anything that can be made to work with a different interface will work with the tags. So, to a large degree they are a matter of personal taste. I've had a lot of trouble trying to figure out why I didn't like them. I think it can be summarized as
1. They depart from existing (TypeTraits) usage for no particular gain. This is not really important especially since the default arguments make this invisible for the most common case and it would be very bad to forbid potential improvements just because they are different.
I agree.
2. Why are they used for some things and not others? The tags are used for variadicness, constness, and calling convention, but (from a user's perspective) they are not used for member pointer vs. function vs. function pointer.
The previous version used tags for these properties. Further, 2 is in opposition to 1: putting the "function decoration" into tags will remove the "TypeTraits feel". All I can say is: I've been there. I came to the conclusion that simple and straightforward client code is more important -- and it really did cost me quite an effort to let go of the nagging perfectionism about consistency for consistency's sake.
3. Why separate the return type and the parameters from everything else? I would prefer to either combine or separate EVERYTHING. That, however, is just personal taste.
For the same reason I'm not at all convinced that it would really make the library better. However, these thoughts seem familiar, somehow ;-)... Thanks for taking the time to put them into words! Regards, Tobias