http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53648
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-06-12 17:27:50 UTC --- There are other cases involving non-empty tuples that will still result in an ambiguity e.g. struct A { }; auto d = tuple<tuple<tuple<A, A>, A>, A>{}; My solution avoids using the EBO for some condition I don't remember (the code's on another machine) but it handles all the cases I tested. I also preserve the property that sizeof(tuple<char, tuple<>>)==1, which I think your suggestion loses.