
On 01/17/2005 07:35 PM, David Abrahams wrote:
Larry Evans <cppljevans@cox-internet.com> writes:
But the aforementioned
t.get_inherit_side<...>:::type::left_type::value;
does compile? OK, now I see. Instead of >::head_type, there should have been >::type::head_type. Does it make sense now?
Nope. I'm still looking for a member whose name is get_tail<...> and not seeing any such thing.
The lastest upload, get_ith_head_test.cpp has a member function, get_ith_head, which does this. The code: t.get_inherit_side<...>:::type::left_type::value; is simply a qualified access to the member variable of a supertype of t. There's no need for a member method, and all get_ith_head does is simply use what amounts to the above code to access the proper superclass member variable. As mentioned previously, this is no different than: t.sk::sk+1::sn::value; where t is of type T, and: s0 is supertype of T s1 is supertype of s0 ... sk is supertype of sk-1 ... sn is supertype of sn-1 and all get_tail<T,Index> (and it's successor, get_ith_tail) does is create a typedef for the Index-th supertype of T. There's obviously a 1-to-1 mapping between the values and qualifiers: sk::sk+1::...::sn where: for k in 0..n hence, there's no problem with having the same member variable name since it's prefixed by it's unique qualifier. Isn't this what tuple_base.hpp's element template does, except it just keeps following the tail_type typedefs for k times?