//===----------------------------------------------------------------------===// // // 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, c++17, c++20, c++23 // // class variant; // template // constexpr decltype(auto) visit(this Self&&, Visitor&&); // since C++26 // template // constexpr R visit(this Self&&, Visitor&&); // since C++26 #include #include "test_macros.h" struct Incomplete; template struct Holder { T t; }; constexpr bool test(bool do_it) { if (do_it) { std::variant*, int> v = nullptr; v.visit([](auto) {}); v.visit([](auto) -> Holder* { return nullptr; }); v.visit([](auto) {}); v.visit([](auto) -> Holder* { return nullptr; }); } return true; } int main(int, char**) { test(true); static_assert(test(true)); return 0; }