David Abrahams <[EMAIL PROTECTED]> writes: | Gabriel Dos Reis <[EMAIL PROTECTED]> writes: | | > "Ken Hagan" <[EMAIL PROTECTED]> writes: | > | > | Peter Dimov wrote: | > | > | > | > &k does not exist yet at compile-time (in a pointer to int form), when | > | > templates are instantiated. | > | | > | It doesn't have to. We're instantiating a template, not calling a | > | function, so if "&k" has the type "pointer to thread-local int" then | > | the compiler knows that and can instantiate the appropriate code. | > | > The issue here is the *value* "&k", not the type of that expression. | | Let me reiterate, just in case somebody missed it: this is a similar | problem to that of using a pointer/reference-to-data-member as a | template paramter. You can think of each thread-local global variable | as a data member in a big struct, of which there's a single instance | per thread. The address of this global variable is just as much a | constant as the address of a data member. There's no problem here, | AFAICT.
I see your analogy. However, my point is that * a class is closed: that is, by the time you put the closing brace, the "offset" of the data member is a compile-time constant. * the number of thread local variables is potentially unbounded, meaning that, using your analogy, the offset of the corresponding data-member is not known by the time the compiler finishes processing a given translation unit. -- Gaby _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost