Eric Lemings wrote: > > >> -----Original Message----- >> From: Martin Sebor [mailto:sebor@roguewave.com] >> Sent: Monday, June 02, 2008 2:14 PM >> To: dev@stdcxx.apache.org >> Subject: Re: type_traits progress >> >> Eric Lemings wrote: >>> >>> >>>> -----Original Message----- >>>> From: Travis Vitek [mailto:Travis.Vitek@roguewave.com] >>>> Sent: Friday, May 30, 2008 6:28 PM >>>> To: dev@stdcxx.apache.org >>>> Subject: RE: type_traits progress >>>> >>>> >>>> >>>> Martin Sebor wrote: >>>>> Travis Vitek wrote: >>>>> [...] >>>>>>> Right. That could be another wrinkle. Our traits won't >>>>>>> work with generic code that takes integral_constant >>>>>>> by reference. >>>>>> I don't really see the motivation, but it is obvious that >>>>>> the committee thought it was important for the standard >>>>>> traits to do so, so we should probably follow suit in our >>>>>> internal implementation. >>>> Can you think of a reason why this 'feature' would be important? >>>> >>>>>> If we did decide to do this then we would probably want >>>> our own write >>>>>> __rw_integral_constant and use that internally to avoid namespace >>>>>> pollution? Then I'd assume we'd want something like the following >>>>>> example for is_const... >>>>> Yes, I think this is close to what we want. The only >> thing that bugs >>>>> me about it is... >>>>> >>>>>> template >>>>>> struct __rw_integral_constant >>>>>> { >>>>>> static const T value = v; >>>>>> typedef T value_type; >>>>>> typedef integral_constant type; >>>>> ...this backward dependency on integral_constant, but I >> don't see how >>>>> to break it without template typedefs. I don't think there's >>>> a compiler >>>>> out there that supports them yet. >>>> Actually, this was originally a typo on my part, but I do see >>>> where this >>>> is going. I haven't read about template typedefs, but it seems that >>>> there would be a serious problem caused by the cyclic dependency. >>> Yeah it looks like a typo to me too. Should it be: >>> >>> typedef __rw_integral_constant type; >>> >>> In all cases I've seen, `type' refers to type of self for identity >>> properties. This typedef would not hold up the identity property. >> IIUC, for every specialization X of integral_constant, this >> must hold: >> >> is_same::value == true >> >> With integral_constant derived from __rw_integral_constant >> the condition would fail. > > Not if it defined its own `type'. > > template > struct integral_constant: __rw_integral_constant > { > typedef integral_constant type; > }; Good point! This would effectively break the problematic dependency, wouldn't it, Travis? Martin