On 11/21/2011 01:22 AM, Jason Merrill wrote:
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.
Ah!! So, now I'm puzzled: why are we using all those __and_ and __or_ in
the first place, if isn't because we want to avoid to avoid some
instantiations? Daniel can you remind me that?
Thanks,
Paolo.