This bug fix required the following change to libstdc++-v3/include/std/tuple:

-      template<typename... _UElements, typename = typename
-       enable_if<__and_<integral_constant<bool, sizeof...(_UElements)
-                                          == sizeof...(_Elements)>,
-                        __all_convertible<__conv_types<_UElements...>,
-                                          __conv_types<_Elements...>>
-                        >::value>::type>
+      template<typename... _UElements,
+              typename = typename enable_if<sizeof...(_UElements)
+                                            == sizeof...(_Elements)>::type,
+              typename = typename
+                enable_if<__all_convertible<__conv_types<_UElements...>,
+                                            __conv_types<_Elements...> >::value
+                          >::type>

__and_ doesn't have the shortcut semantics of &&, so checking for equal sizeof... didn't prevent us from trying the __all_convertible test.

Hmm, actually, that still shouldn't have produced an error, it should just SFINAE. Another bug to fix...

Jason

Reply via email to