> -----Original Message----- > From: Martin Sebor [mailto:[EMAIL PROTECTED] > 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:[EMAIL PROTECTED] > >> 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<T, V> > >>>>> 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 <class T, T v> > >>>> struct __rw_integral_constant > >>>> { > >>>> static const T value = v; > >>>> typedef T value_type; > >>>> typedef integral_constant<T,v> 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<T,v> 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<X, typename X::type>::value == true > > With integral_constant derived from __rw_integral_constant > the condition would fail.
Not if it defined its own `type'. template <class T, T v> struct integral_constant: __rw_integral_constant<T, v> { typedef integral_constant<T, v> type; }; That's the way I usually see it done. Brad.