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.