Index: include/tuple =================================================================== --- include/tuple +++ include/tuple @@ -1012,10 +1012,21 @@ template struct __find_exactly_one_checked { - static constexpr bool __matches[] = {is_same<_T1, _Args>::value...}; +#if defined(__clang__) && __clang_major__ > 5 && __cplusplus > 201402L + // Workaround https://bugs.llvm.org/show_bug.cgi?id=28385 + inline _LIBCPP_INLINE_VISIBILITY + static constexpr size_t __index() + { + constexpr bool __matches[] = {is_same<_T1, _Args>::value...}; + return __find_detail::__find_idx(0, __matches); + } + static constexpr size_t value = __index(); +#else + static constexpr bool __matches[] = {is_same<_T1, _Args>::value...}; static constexpr size_t value = __find_detail::__find_idx(0, __matches); - static_assert (value != __not_found, "type not found in type list" ); - static_assert(value != __ambiguous,"type occurs more than once in type list"); +#endif + static_assert(value != __not_found, "type not found in type list" ); + static_assert(value != __ambiguous, "type occurs more than once in type list"); }; template