On Sat, 11 May 2019 at 00:55, Jonathan Wakely <jwak...@redhat.com> wrote: > > On 11/05/19 00:51 +0300, Ville Voutilainen wrote: > >On Sat, 11 May 2019 at 00:42, Jonathan Wakely <jwak...@redhat.com> wrote: > >> > >> A disabled specialization should not be callable, so move the function > >> call operator into a new base class which correctly implements the > >> disabled hash semantics. For the versioned namespace configuration do > >> not derive from __poison_hash in the enabled case, as the empty base > >> class serves no purpose but potentially increases the object size. For > >> the default configuration that base class must be kept, to preserve > >> layout. > > > >I continue to not be a fan of the versioned namespace ifdeffery in > >this, but I can live with it. > > The versioned namespace configuration should be as good as we can make > it, with no limitations due to ABI compatibility. Removing redundant > base classes allows more compact class layouts. With current trunk > this type has size 3, in the versioned namespace after my patch it has > size 2 (and if we patched hash<optional<T>> it would have size 1):
I understand all of that, but I do question the value of optimizing the versioned namespace configuration at the cost of sprinkling such ifdefs into our code.