Loading libcxx/include/variant +2 −2 Original line number Diff line number Diff line Loading @@ -491,7 +491,7 @@ private: template <class _Fp, class... _Vs> inline _LIBCPP_INLINE_VISIBILITY static constexpr decltype(auto) __dispatch(_Fp __f, _Vs... __vs) { return __invoke_constexpr( return _VSTD::__invoke_constexpr( static_cast<_Fp>(__f), __access::__base::__get_alt<_Is>(static_cast<_Vs>(__vs))...); } Loading Loading @@ -599,7 +599,7 @@ private: __std_visit_exhaustive_visitor_check< _Visitor, decltype((_VSTD::forward<_Alts>(__alts).__value))...>(); return __invoke_constexpr(_VSTD::forward<_Visitor>(__visitor), return _VSTD::__invoke_constexpr(_VSTD::forward<_Visitor>(__visitor), _VSTD::forward<_Alts>(__alts).__value...); } _Visitor&& __visitor; Loading libcxx/test/std/utilities/variant/variant.visit/robust_against_adl.pass.cpp 0 → 100644 +46 −0 Original line number Diff line number Diff line // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14 // Throwing bad_variant_access is supported starting in macosx10.13 // XFAIL: with_system_cxx_lib=macosx10.12 && !no-exceptions // XFAIL: with_system_cxx_lib=macosx10.11 && !no-exceptions // XFAIL: with_system_cxx_lib=macosx10.10 && !no-exceptions // XFAIL: with_system_cxx_lib=macosx10.9 && !no-exceptions // <variant> // template <class Visitor, class... Variants> // constexpr see below visit(Visitor&& vis, Variants&&... vars); #include <variant> #include "test_macros.h" struct Incomplete; template<class T> struct Holder { T t; }; constexpr bool test(bool do_it) { if (do_it) { std::variant<Holder<Incomplete>*, int> v = nullptr; std::visit([](auto){}, v); std::visit([](auto) -> Holder<Incomplete>* { return nullptr; }, v); } return true; } int main(int, char**) { test(true); #if TEST_STD_VER > 17 static_assert(test(true)); #endif return 0; } Loading
libcxx/include/variant +2 −2 Original line number Diff line number Diff line Loading @@ -491,7 +491,7 @@ private: template <class _Fp, class... _Vs> inline _LIBCPP_INLINE_VISIBILITY static constexpr decltype(auto) __dispatch(_Fp __f, _Vs... __vs) { return __invoke_constexpr( return _VSTD::__invoke_constexpr( static_cast<_Fp>(__f), __access::__base::__get_alt<_Is>(static_cast<_Vs>(__vs))...); } Loading Loading @@ -599,7 +599,7 @@ private: __std_visit_exhaustive_visitor_check< _Visitor, decltype((_VSTD::forward<_Alts>(__alts).__value))...>(); return __invoke_constexpr(_VSTD::forward<_Visitor>(__visitor), return _VSTD::__invoke_constexpr(_VSTD::forward<_Visitor>(__visitor), _VSTD::forward<_Alts>(__alts).__value...); } _Visitor&& __visitor; Loading
libcxx/test/std/utilities/variant/variant.visit/robust_against_adl.pass.cpp 0 → 100644 +46 −0 Original line number Diff line number Diff line // -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14 // Throwing bad_variant_access is supported starting in macosx10.13 // XFAIL: with_system_cxx_lib=macosx10.12 && !no-exceptions // XFAIL: with_system_cxx_lib=macosx10.11 && !no-exceptions // XFAIL: with_system_cxx_lib=macosx10.10 && !no-exceptions // XFAIL: with_system_cxx_lib=macosx10.9 && !no-exceptions // <variant> // template <class Visitor, class... Variants> // constexpr see below visit(Visitor&& vis, Variants&&... vars); #include <variant> #include "test_macros.h" struct Incomplete; template<class T> struct Holder { T t; }; constexpr bool test(bool do_it) { if (do_it) { std::variant<Holder<Incomplete>*, int> v = nullptr; std::visit([](auto){}, v); std::visit([](auto) -> Holder<Incomplete>* { return nullptr; }, v); } return true; } int main(int, char**) { test(true); #if TEST_STD_VER > 17 static_assert(test(true)); #endif return 0; }