Boost logo

Boost :

From: Yitzhak Sapir (yitzhaks_at_[hidden])
Date: 2002-10-10 06:25:32


On Wed, 9 Oct 2002, Aleksey Gurtovoy wrote:

> Yitzhak Sapir wrote:
> > > Nope, because due to its variadic interface 'list_c<T,...>'
> > > needs to reserve some single value for denoting unused
> > > arguments, and taking that value out of range of possible
> > > values of type 'T' is not really a feasible option
> > > (consider, for instance, T == bool).
> >
> > This seems to work on VC:
> >
> > template <class T> struct LargerThan
> > {
> > typedef long type;
> > enum { illegal_value = 0xBADBAD };
> > };
> >
> > template <> struct LargerThan<bool>
> > {
> > typedef char type;
> > enum { illegal_value = -1 };
> > };
> >
> > // For pointers, illegal value is 0 (or perhaps, 1)
> >
> > template <class T, LargerThan<T>::type c1 =
> > LargerThan<T>::illegal_value>
> > struct list_c
> > {
> > ...
> > };
>
> How does it change anything? I mean, from the user's point of view, what
> change in observable behavior it achieves, if any, and what specific problem
> this change solves?

Supposedly this was supposed to work:

char hi[] = "hi";
char hello[] = "hello";

list_c<char *, hi, hello ...>

For example, if integral_c were declared like this:

template <class T, long value> struct integral_c;

then I couldn't do: integral_c<char *, hi>

But since it isn't, I can.

However, attempts by me to add pointer/non-pointer selection to LargerThan
above so that it supports selection of "illegal_value" for pointers/non
integral types, and for the respective selection of "larger" types, have
not been successful on VC6.5.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk