Author: mpark Date: Mon Jan 16 02:14:25 2017 New Revision: 292097 URL: http://llvm.org/viewvc/llvm-project?rev=292097&view=rev Log: Added a workaround for a `-fdelayed-template-parsing` bug.
Summary: There seems to be an additional bug in `-fdelayed-template-parsing` similar to http://llvm.org/viewvc/llvm-project?view=revision&revision=236063. This is a workaround for it for <variant> to compile with `clang-cl` on Windows. Reviewers: EricWF Differential Revision: https://reviews.llvm.org/D28734 Modified: libcxx/trunk/include/variant libcxx/trunk/test/std/utilities/variant/variant.visit/visit.pass.cpp Modified: libcxx/trunk/include/variant URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/variant?rev=292097&r1=292096&r2=292097&view=diff ============================================================================== --- libcxx/trunk/include/variant (original) +++ libcxx/trunk/include/variant Mon Jan 16 02:14:25 2017 @@ -466,17 +466,22 @@ private: return __result{{_VSTD::forward<_Fs>(__fs)...}}; } - template <class _Fp, class... _Vs, size_t... _Is> - inline _LIBCPP_INLINE_VISIBILITY - static constexpr auto __make_dispatch(index_sequence<_Is...>) { - struct __dispatcher { - static constexpr decltype(auto) __dispatch(_Fp __f, _Vs... __vs) { + template <std::size_t... _Is> + struct __dispatcher { + template <class _Fp, class... _Vs> + inline _LIBCPP_INLINE_VISIBILITY + static constexpr decltype(auto) __dispatch(_Fp __f, _Vs... __vs) { return __invoke_constexpr( static_cast<_Fp>(__f), __access::__base::__get_alt<_Is>(static_cast<_Vs>(__vs))...); - } - }; - return _VSTD::addressof(__dispatcher::__dispatch); + } + }; + + template <class _Fp, class... _Vs, size_t... _Is> + inline _LIBCPP_INLINE_VISIBILITY + static constexpr auto __make_dispatch(index_sequence<_Is...>) { + return _VSTD::addressof( + __dispatcher<_Is...>::template __dispatch<_Fp, _Vs...>); } template <size_t _Ip, class _Fp, class... _Vs> Modified: libcxx/trunk/test/std/utilities/variant/variant.visit/visit.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/variant/variant.visit/visit.pass.cpp?rev=292097&r1=292096&r2=292097&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/variant/variant.visit/visit.pass.cpp (original) +++ libcxx/trunk/test/std/utilities/variant/variant.visit/visit.pass.cpp Mon Jan 16 02:14:25 2017 @@ -10,9 +10,6 @@ // UNSUPPORTED: c++98, c++03, c++11, c++14 -// FIXME: This test hangs for an unknown reason on Windows. See llvm.org/PR31642 -// UNSUPPORTED: windows - // <variant> // template <class Visitor, class... Variants> // constexpr see below visit(Visitor&& vis, Variants&&... vars); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits