Boost logo

Boost :

Subject: Re: [boost] [unordered] Buffered functions?
From: David Abrahams (dave_at_[hidden])
Date: 2008-12-28 14:41:56


on Sun Dec 28 2008, Howard Hinnant <hinnant-AT-twcny.rr.com> wrote:

> On Dec 28, 2008, at 1:25 AM, David Abrahams wrote:
>
>> The conundrum here is that if we use that technique for tuple, then a
>> tuple of empty types can never be empty itself. I'm starting to get ill
>> just thinking about a generic framework for composing "logically empty"
>> types that undoes this "EBO erasure" effect when necessary.
>
> Perhaps I'm misunderstanding. Reverting from English to C++ in the hopes of
> clarification. :-) The C++0X program and its output below look quite reasonable to
> me:
>

<snip>

Reasonable, but unless I'm missing something, impossible, unless the
tuple itself is derived from all those empty bases. A class containing
an empty member is not itself empty, IIUC.

> I currently favor the "shallow hierarchy" design Doug outlined in c+
> +std-lib-18989. Though EMO isn't shown in that description, it is pretty simple to
> add to that design.

/me rummages through his committee message archive...

As far as I can tell from that thread, your solution and Doug's shallow
refinement show exactly the problem you were trying to warn about: any
empty element types become (private) bases of the tuple type itself,
leading to unintended namespace associations. As far as I can tell this
is no different in spirit from

  namespace std {

  template <class T, class A>
  class vector
     : private A
  {
      ...
  };

  } // std

  Such an implementation of "EMO" is error prone as it associates the namespace of the
  client-supplied A with that of the vector

And, BTW, this is all way too hard; at its limit it leads to building
every generic class template out of tuples instead of ordinary members.
We probably should have an EMO in the core language after all.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com

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