https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67537

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
My first impression is that this is a clang bug.

This:

      template<typename... _UElements> using _TMC =
                  _TC<(sizeof...(_Elements) == sizeof...(_UElements)),
                      _Elements...>;

should make it impossible to get:

/home/trippels/gcc_6/usr/local/lib/gcc/powerpc64le-unknown-linux-gnu/6.0.0/../../../../include/c++/6.0.0/tuple:481:62:
error: pack expansion contains parameter packs
      '_Elements' and '_UElements' that have different lengths (1 vs. 0)
      return __and_<is_constructible<_Elements, _UElements&&>...>::value;
                                     ~~~~~~~~~  ~~~~~~~~~~   ^
/home/trippels/gcc_6/usr/local/lib/gcc/powerpc64le-unknown-linux-gnu/6.0.0/../../../../include/c++/6.0.0/tuple:580:21:
note: in instantiation of function template
      specialization 'std::_TC<true, boost::hana::test::integer<0, 17, void>
>::_MoveConstructibleTuple<>' requested here
                    _MoveConstructibleTuple<_UElements...>()
                    ^

because it should not be possible for _Elements and _UElements to have
different lengths inside _TC<true, ...>, it should have gone to _TC<false, ...>
instead.

Reply via email to