aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2022-08-19 14:47:59 +0200
committerMarco Bubke <marco.bubke@qt.io>2022-08-23 09:51:43 +0000
commit84c1d6572bce6fc6c1edb5c6246e81bdb841f00a (patch)
treebddfc71e61fa44ed8e77a24935ad1e640f376a70
parent17693bc41518ee1c15d673dfee3c3818057b1895 (diff)
Utils: Remove variant.h
Since we are now requiring macOS 10.14 we can remove our local copy of std::variant and use for macOS std::variant too. Change-Id: I589d03b35fc56878b7392ffa7047a439e588fe43 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/libs/3rdparty/variant/LICENSE.md23
-rw-r--r--src/libs/3rdparty/variant/README.md37
-rw-r--r--src/libs/3rdparty/variant/variant.hpp2465
-rw-r--r--src/libs/languageserverprotocol/clientcapabilities.cpp12
-rw-r--r--src/libs/languageserverprotocol/clientcapabilities.h8
-rw-r--r--src/libs/languageserverprotocol/completion.h2
-rw-r--r--src/libs/languageserverprotocol/jsonobject.h2
-rw-r--r--src/libs/languageserverprotocol/jsonrpcmessages.h31
-rw-r--r--src/libs/languageserverprotocol/languagefeatures.cpp32
-rw-r--r--src/libs/languageserverprotocol/languagefeatures.h22
-rw-r--r--src/libs/languageserverprotocol/lsptypes.cpp16
-rw-r--r--src/libs/languageserverprotocol/lsptypes.h8
-rw-r--r--src/libs/languageserverprotocol/lsputils.h37
-rw-r--r--src/libs/languageserverprotocol/progresssupport.cpp6
-rw-r--r--src/libs/languageserverprotocol/progresssupport.h8
-rw-r--r--src/libs/languageserverprotocol/semantictokens.h4
-rw-r--r--src/libs/languageserverprotocol/servercapabilities.cpp94
-rw-r--r--src/libs/languageserverprotocol/servercapabilities.h60
-rw-r--r--src/libs/languageserverprotocol/workspace.cpp4
-rw-r--r--src/libs/languageserverprotocol/workspace.h2
-rw-r--r--src/libs/nanotrace/nanotrace.cpp2
-rw-r--r--src/libs/nanotrace/nanotrace.h6
-rw-r--r--src/libs/sqlite/constraints.h5
-rw-r--r--src/libs/sqlite/createtablesqlstatementbuilder.h4
-rw-r--r--src/libs/sqlite/sqlitetable.h4
-rw-r--r--src/libs/sqlite/sqlitevalue.h22
-rw-r--r--src/libs/sqlite/tableconstraints.h5
-rw-r--r--src/libs/utils/CMakeLists.txt2
-rw-r--r--src/libs/utils/fsengine/fileiconprovider.cpp9
-rw-r--r--src/libs/utils/utils.qbs2
-rw-r--r--src/libs/utils/variant.h61
-rw-r--r--src/plugins/android/avdmanageroutputparser.cpp9
-rw-r--r--src/plugins/clangcodemodel/clangdclient.cpp18
-rw-r--r--src/plugins/clangcodemodel/clangdclient.h2
-rw-r--r--src/plugins/clangcodemodel/clangdcompletion.cpp8
-rw-r--r--src/plugins/clangcodemodel/clangdfollowsymbol.cpp8
-rw-r--r--src/plugins/clangcodemodel/clangdquickfixes.cpp10
-rw-r--r--src/plugins/clangcodemodel/clangdswitchdecldef.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangtextmark.cpp2
-rw-r--r--src/plugins/clangcodemodel/test/clangdtests.cpp2
-rw-r--r--src/plugins/clangtools/clangtool.cpp10
-rw-r--r--src/plugins/clangtools/clangtool.h4
-rw-r--r--src/plugins/languageclient/client.cpp43
-rw-r--r--src/plugins/languageclient/languageclientcompletionassist.cpp18
-rw-r--r--src/plugins/languageclient/languageclientformatter.cpp4
-rw-r--r--src/plugins/languageclient/languageclienthoverhandler.cpp20
-rw-r--r--src/plugins/languageclient/languageclientoutline.cpp16
-rw-r--r--src/plugins/languageclient/languageclientquickfix.cpp8
-rw-r--r--src/plugins/languageclient/languageclientsymbolsupport.cpp28
-rw-r--r--src/plugins/languageclient/locatorfilter.cpp8
-rw-r--r--src/plugins/languageclient/progressmanager.cpp14
-rw-r--r--src/plugins/languageclient/semantichighlightsupport.cpp6
-rw-r--r--src/plugins/languageclient/snippet.cpp4
-rw-r--r--src/plugins/projectexplorer/projectnodes.cpp10
-rw-r--r--src/plugins/projectexplorer/projectnodes.h4
-rw-r--r--src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h6
-rw-r--r--src/plugins/qmldesigner/designercore/include/imagecacheauxiliarydata.h10
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h4
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h4
-rw-r--r--src/plugins/texteditor/snippets/snippet.cpp12
-rw-r--r--src/plugins/texteditor/snippets/snippetparser.h5
-rw-r--r--src/plugins/texteditor/texteditor.cpp8
-rw-r--r--tests/unit/unittest/asynchronousimagefactory-test.cpp8
-rw-r--r--tests/unit/unittest/gtest-creator-printing.cpp24
-rw-r--r--tests/unit/unittest/gtest-creator-printing.h30
67 files changed, 414 insertions, 2958 deletions
diff --git a/src/libs/3rdparty/variant/LICENSE.md b/src/libs/3rdparty/variant/LICENSE.md
deleted file mode 100644
index 36b7cd93cd..0000000000
--- a/src/libs/3rdparty/variant/LICENSE.md
+++ /dev/null
@@ -1,23 +0,0 @@
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/src/libs/3rdparty/variant/README.md b/src/libs/3rdparty/variant/README.md
deleted file mode 100644
index 6644286d27..0000000000
--- a/src/libs/3rdparty/variant/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# MPark.Variant
-
-> __C++17__ `std::variant` for __C++11__/__14__/__17__
-
-[![release][badge.release]][release]
-[![header][badge.header]][header]
-[![travis][badge.travis]][travis]
-[![appveyor][badge.appveyor]][appveyor]
-[![license][badge.license]][license]
-[![godbolt][badge.godbolt]][godbolt]
-[![wandbox][badge.wandbox]][wandbox]
-
-[badge.release]: https://img.shields.io/github/release/mpark/variant.svg
-[badge.header]: https://img.shields.io/badge/single%20header-master-blue.svg
-[badge.travis]: https://travis-ci.org/mpark/variant.svg?branch=master
-[badge.appveyor]: https://ci.appveyor.com/api/projects/status/github/mpark/variant?branch=master&svg=true
-[badge.license]: https://img.shields.io/badge/license-boost-blue.svg
-[badge.godbolt]: https://img.shields.io/badge/try%20it-on%20godbolt-222266.svg
-[badge.wandbox]: https://img.shields.io/badge/try%20it-on%20wandbox-5cb85c.svg
-
-[release]: https://github.com/mpark/variant/releases/latest
-[header]: https://github.com/mpark/variant/blob/single-header/master/variant.hpp
-[travis]: https://travis-ci.org/mpark/variant
-[appveyor]: https://ci.appveyor.com/project/mpark/variant
-[license]: https://github.com/mpark/variant/blob/master/LICENSE.md
-[godbolt]: https://godbolt.org/g/1qYDAK
-[wandbox]: https://wandbox.org/permlink/QV3gZ2KQQNwgoFIB
-
-## Single Header
-
-This branch provides a standalone `variant.hpp` file for each
-[release](https://github.com/mpark/variant/releases).
-Copy it and `#include` away!
-
-## License
-
-Distributed under the [Boost Software License, Version 1.0](LICENSE.md).
diff --git a/src/libs/3rdparty/variant/variant.hpp b/src/libs/3rdparty/variant/variant.hpp
deleted file mode 100644
index dca26986c9..0000000000
--- a/src/libs/3rdparty/variant/variant.hpp
+++ /dev/null
@@ -1,2465 +0,0 @@
-// MPark.Variant
-//
-// Copyright Michael Park, 2015-2017
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
-
-#ifndef MPARK_VARIANT_HPP
-#define MPARK_VARIANT_HPP
-
-#if defined(__GNUC__) && __GNUC__ >= 9
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-copy"
-#endif
-
-/*
- variant synopsis
-
-namespace std {
-
- // 20.7.2, class template variant
- template <class... Types>
- class variant {
- public:
-
- // 20.7.2.1, constructors
- constexpr variant() noexcept(see below);
- variant(const variant&);
- variant(variant&&) noexcept(see below);
-
- template <class T> constexpr variant(T&&) noexcept(see below);
-
- template <class T, class... Args>
- constexpr explicit variant(in_place_type_t<T>, Args&&...);
-
- template <class T, class U, class... Args>
- constexpr explicit variant(
- in_place_type_t<T>, initializer_list<U>, Args&&...);
-
- template <size_t I, class... Args>
- constexpr explicit variant(in_place_index_t<I>, Args&&...);
-
- template <size_t I, class U, class... Args>
- constexpr explicit variant(
- in_place_index_t<I>, initializer_list<U>, Args&&...);
-
- // 20.7.2.2, destructor
- ~variant();
-
- // 20.7.2.3, assignment
- variant& operator=(const variant&);
- variant& operator=(variant&&) noexcept(see below);
-
- template <class T> variant& operator=(T&&) noexcept(see below);
-
- // 20.7.2.4, modifiers
- template <class T, class... Args>
- T& emplace(Args&&...);
-
- template <class T, class U, class... Args>
- T& emplace(initializer_list<U>, Args&&...);
-
- template <size_t I, class... Args>
- variant_alternative<I, variant>& emplace(Args&&...);
-
- template <size_t I, class U, class... Args>
- variant_alternative<I, variant>& emplace(initializer_list<U>, Args&&...);
-
- // 20.7.2.5, value status
- constexpr bool valueless_by_exception() const noexcept;
- constexpr size_t index() const noexcept;
-
- // 20.7.2.6, swap
- void swap(variant&) noexcept(see below);
- };
-
- // 20.7.3, variant helper classes
- template <class T> struct variant_size; // undefined
-
- template <class T>
- constexpr size_t variant_size_v = variant_size<T>::value;
-
- template <class T> struct variant_size<const T>;
- template <class T> struct variant_size<volatile T>;
- template <class T> struct variant_size<const volatile T>;
-
- template <class... Types>
- struct variant_size<variant<Types...>>;
-
- template <size_t I, class T> struct variant_alternative; // undefined
-
- template <size_t I, class T>
- using variant_alternative_t = typename variant_alternative<I, T>::type;
-
- template <size_t I, class T> struct variant_alternative<I, const T>;
- template <size_t I, class T> struct variant_alternative<I, volatile T>;
- template <size_t I, class T> struct variant_alternative<I, const volatile T>;
-
- template <size_t I, class... Types>
- struct variant_alternative<I, variant<Types...>>;
-
- constexpr size_t variant_npos = -1;
-
- // 20.7.4, value access
- template <class T, class... Types>
- constexpr bool holds_alternative(const variant<Types...>&) noexcept;
-
- template <size_t I, class... Types>
- constexpr variant_alternative_t<I, variant<Types...>>&
- get(variant<Types...>&);
-
- template <size_t I, class... Types>
- constexpr variant_alternative_t<I, variant<Types...>>&&
- get(variant<Types...>&&);
-
- template <size_t I, class... Types>
- constexpr variant_alternative_t<I, variant<Types...>> const&
- get(const variant<Types...>&);
-
- template <size_t I, class... Types>
- constexpr variant_alternative_t<I, variant<Types...>> const&&
- get(const variant<Types...>&&);
-
- template <class T, class... Types>
- constexpr T& get(variant<Types...>&);
-
- template <class T, class... Types>
- constexpr T&& get(variant<Types...>&&);
-
- template <class T, class... Types>
- constexpr const T& get(const variant<Types...>&);
-
- template <class T, class... Types>
- constexpr const T&& get(const variant<Types...>&&);
-
- template <size_t I, class... Types>
- constexpr add_pointer_t<variant_alternative_t<I, variant<Types...>>>
- get_if(variant<Types...>*) noexcept;
-
- template <size_t I, class... Types>
- constexpr add_pointer_t<const variant_alternative_t<I, variant<Types...>>>
- get_if(const variant<Types...>*) noexcept;
-
- template <class T, class... Types>
- constexpr add_pointer_t<T>
- get_if(variant<Types...>*) noexcept;
-
- template <class T, class... Types>
- constexpr add_pointer_t<const T>
- get_if(const variant<Types...>*) noexcept;
-
- // 20.7.5, relational operators
- template <class... Types>
- constexpr bool operator==(const variant<Types...>&, const variant<Types...>&);
-
- template <class... Types>
- constexpr bool operator!=(const variant<Types...>&, const variant<Types...>&);
-
- template <class... Types>
- constexpr bool operator<(const variant<Types...>&, const variant<Types...>&);
-
- template <class... Types>
- constexpr bool operator>(const variant<Types...>&, const variant<Types...>&);
-
- template <class... Types>
- constexpr bool operator<=(const variant<Types...>&, const variant<Types...>&);
-
- template <class... Types>
- constexpr bool operator>=(const variant<Types...>&, const variant<Types...>&);
-
- // 20.7.6, visitation
- template <class Visitor, class... Variants>
- constexpr see below visit(Visitor&&, Variants&&...);
-
- // 20.7.7, class monostate
- struct monostate;
-
- // 20.7.8, monostate relational operators
- constexpr bool operator<(monostate, monostate) noexcept;
- constexpr bool operator>(monostate, monostate) noexcept;
- constexpr bool operator<=(monostate, monostate) noexcept;
- constexpr bool operator>=(monostate, monostate) noexcept;
- constexpr bool operator==(monostate, monostate) noexcept;
- constexpr bool operator!=(monostate, monostate) noexcept;
-
- // 20.7.9, specialized algorithms
- template <class... Types>
- void swap(variant<Types...>&, variant<Types...>&) noexcept(see below);
-
- // 20.7.10, class bad_variant_access
- class bad_variant_access;
-
- // 20.7.11, hash support
- template <class T> struct hash;
- template <class... Types> struct hash<variant<Types...>>;
- template <> struct hash<monostate>;
-
-} // namespace std
-
-*/
-
-#include <cstddef>
-#include <exception>
-#include <functional>
-#include <initializer_list>
-#include <new>
-#include <type_traits>
-#include <utility>
-
-// MPark.Variant
-//
-// Copyright Michael Park, 2015-2017
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
-
-#ifndef MPARK_CONFIG_HPP
-#define MPARK_CONFIG_HPP
-
-// MSVC 2015 Update 3.
-#if __cplusplus < 201103L && (!defined(_MSC_VER) || _MSC_FULL_VER < 190024210)
-#error "MPark.Variant requires C++11 support."
-#endif
-
-#ifndef __has_builtin
-#define __has_builtin(x) 0
-#endif
-
-#ifndef __has_include
-#define __has_include(x) 0
-#endif
-
-#ifndef __has_feature
-#define __has_feature(x) 0
-#endif
-
-#if __has_builtin(__builtin_addressof) || \
- (defined(__GNUC__) && __GNUC__ >= 7) || defined(_MSC_VER)
-#define MPARK_BUILTIN_ADDRESSOF
-#endif
-
-#if __has_builtin(__builtin_unreachable)
-#define MPARK_BUILTIN_UNREACHABLE
-#endif
-
-#if __has_builtin(__type_pack_element)
-#define MPARK_TYPE_PACK_ELEMENT
-#endif
-
-#if defined(__cpp_constexpr) && __cpp_constexpr >= 201304
-#if !defined(_MSC_VER) || _MSC_VER < 1915 // compile issue in msvc 2017 update 8
-#define MPARK_CPP14_CONSTEXPR
-#endif
-#endif
-
-#if __has_feature(cxx_exceptions) || defined(__cpp_exceptions) || \
- (defined(_MSC_VER) && defined(_CPPUNWIND))
-#define MPARK_EXCEPTIONS
-#endif
-
-#if defined(__cpp_generic_lambdas) || defined(_MSC_VER)
-#define MPARK_GENERIC_LAMBDAS
-#endif
-
-#if defined(__cpp_lib_integer_sequence)
-#define MPARK_INTEGER_SEQUENCE
-#endif
-
-#if defined(__cpp_return_type_deduction) || defined(_MSC_VER)
-#define MPARK_RETURN_TYPE_DEDUCTION
-#endif
-
-#if defined(__cpp_lib_transparent_operators) || defined(_MSC_VER)
-#define MPARK_TRANSPARENT_OPERATORS
-#endif
-
-#if defined(__cpp_variable_templates) || defined(_MSC_VER)
-#define MPARK_VARIABLE_TEMPLATES
-#endif
-
-#if !defined(__GLIBCXX__) || __has_include(<codecvt>) // >= libstdc++-5
-#define MPARK_TRIVIALITY_TYPE_TRAITS
-#endif
-
-#endif // MPARK_CONFIG_HPP
-
-// MPark.Variant
-//
-// Copyright Michael Park, 2015-2017
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
-
-#ifndef MPARK_IN_PLACE_HPP
-#define MPARK_IN_PLACE_HPP
-
-#include <cstddef>
-
-
-namespace mpark {
-
- struct in_place_t { explicit in_place_t() = default; };
-
- template <std::size_t I>
- struct in_place_index_t { explicit in_place_index_t() = default; };
-
- template <typename T>
- struct in_place_type_t { explicit in_place_type_t() = default; };
-
-#ifdef MPARK_VARIABLE_TEMPLATES
- constexpr in_place_t in_place{};
-
- template <std::size_t I> constexpr in_place_index_t<I> in_place_index{};
-
- template <typename T> constexpr in_place_type_t<T> in_place_type{};
-#endif
-
-} // namespace mpark
-
-#endif // MPARK_IN_PLACE_HPP
-
-// MPark.Variant
-//
-// Copyright Michael Park, 2015-2017
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
-
-#ifndef MPARK_LIB_HPP
-#define MPARK_LIB_HPP
-
-#include <memory>
-#include <functional>
-#include <type_traits>
-#include <utility>
-
-
-#define RETURN(...) \
- noexcept(noexcept(__VA_ARGS__)) -> decltype(__VA_ARGS__) { \
- return __VA_ARGS__; \
- }
-
-namespace mpark {
- namespace lib {
- template <typename T>
- struct identity { using type = T; };
-
- inline namespace cpp14 {
- template <typename T, std::size_t N>
- struct array {
- constexpr const T &operator[](std::size_t index) const {
- return data[index];
- }
-
- T data[N == 0 ? 1 : N];
- };
-
- template <typename T>
- using add_pointer_t = typename std::add_pointer<T>::type;
-
- template <typename... Ts>
- using common_type_t = typename std::common_type<Ts...>::type;
-
- template <typename T>
- using decay_t = typename std::decay<T>::type;
-
- template <bool B, typename T = void>
- using enable_if_t = typename std::enable_if<B, T>::type;
-
- template <typename T>
- using remove_const_t = typename std::remove_const<T>::type;
-
- template <typename T>
- using remove_reference_t = typename std::remove_reference<T>::type;
-
- template <typename T>
- inline constexpr T &&forward(remove_reference_t<T> &t) noexcept {
- return static_cast<T &&>(t);
- }
-
- template <typename T>
- inline constexpr T &&forward(remove_reference_t<T> &&t) noexcept {
- static_assert(!std::is_lvalue_reference<T>::value,
- "can not forward an rvalue as an lvalue");
- return static_cast<T &&>(t);
- }
-
- template <typename T>
- inline constexpr remove_reference_t<T> &&move(T &&t) noexcept {
- return static_cast<remove_reference_t<T> &&>(t);
- }
-
-#ifdef MPARK_INTEGER_SEQUENCE
- using std::integer_sequence;
- using std::index_sequence;
- using std::make_index_sequence;
- using std::index_sequence_for;
-#else
- template <typename T, T... Is>
- struct integer_sequence {
- using value_type = T;
- static constexpr std::size_t size() noexcept { return sizeof...(Is); }
- };
-
- template <std::size_t... Is>
- using index_sequence = integer_sequence<std::size_t, Is...>;
-
- template <typename Lhs, typename Rhs>
- struct make_index_sequence_concat;
-
- template <std::size_t... Lhs, std::size_t... Rhs>
- struct make_index_sequence_concat<index_sequence<Lhs...>,
- index_sequence<Rhs...>>
- : identity<index_sequence<Lhs..., (sizeof...(Lhs) + Rhs)...>> {};
-
- template <std::size_t N>
- struct make_index_sequence_impl;
-
- template <std::size_t N>
- using make_index_sequence = typename make_index_sequence_impl<N>::type;
-
- template <std::size_t N>
- struct make_index_sequence_impl
- : make_index_sequence_concat<make_index_sequence<N / 2>,
- make_index_sequence<N - (N / 2)>> {};
-
- template <>
- struct make_index_sequence_impl<0> : identity<index_sequence<>> {};
-
- template <>
- struct make_index_sequence_impl<1> : identity<index_sequence<0>> {};
-
- template <typename... Ts>
- using index_sequence_for = make_index_sequence<sizeof...(Ts)>;
-#endif
-
- // <functional>
-#ifdef MPARK_TRANSPARENT_OPERATORS
- using equal_to = std::equal_to<>;
-#else
- struct equal_to {
- template <typename Lhs, typename Rhs>
- inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
- RETURN(lib::forward<Lhs>(lhs) == lib::forward<Rhs>(rhs))
- };
-#endif
-
-#ifdef MPARK_TRANSPARENT_OPERATORS
- using not_equal_to = std::not_equal_to<>;
-#else
- struct not_equal_to {
- template <typename Lhs, typename Rhs>
- inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
- RETURN(lib::forward<Lhs>(lhs) != lib::forward<Rhs>(rhs))
- };
-#endif
-
-#ifdef MPARK_TRANSPARENT_OPERATORS
- using less = std::less<>;
-#else
- struct less {
- template <typename Lhs, typename Rhs>
- inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
- RETURN(lib::forward<Lhs>(lhs) < lib::forward<Rhs>(rhs))
- };
-#endif
-
-#ifdef MPARK_TRANSPARENT_OPERATORS
- using greater = std::greater<>;
-#else
- struct greater {
- template <typename Lhs, typename Rhs>
- inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
- RETURN(lib::forward<Lhs>(lhs) > lib::forward<Rhs>(rhs))
- };
-#endif
-
-#ifdef MPARK_TRANSPARENT_OPERATORS
- using less_equal = std::less_equal<>;
-#else
- struct less_equal {
- template <typename Lhs, typename Rhs>
- inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
- RETURN(lib::forward<Lhs>(lhs) <= lib::forward<Rhs>(rhs))
- };
-#endif
-
-#ifdef MPARK_TRANSPARENT_OPERATORS
- using greater_equal = std::greater_equal<>;
-#else
- struct greater_equal {
- template <typename Lhs, typename Rhs>
- inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
- RETURN(lib::forward<Lhs>(lhs) >= lib::forward<Rhs>(rhs))
- };
-#endif
- } // namespace cpp14
-
- inline namespace cpp17 {
-
- // <type_traits>
- template <bool B>
- using bool_constant = std::integral_constant<bool, B>;
-
- template <typename...>
- struct voider : identity<void> {};
-
- template <typename... Ts>
- using void_t = typename voider<Ts...>::type;
-
- namespace detail {
- namespace swappable {
-
- using std::swap;
-
- template <typename T>
- struct is_swappable {
- private:
- template <typename U,
- typename = decltype(swap(std::declval<U &>(),
- std::declval<U &>()))>
- inline static std::true_type test(int);
-
- template <typename U>
- inline static std::false_type test(...);
-
- public:
- static constexpr bool value = decltype(test<T>(0))::value;
- };
-
- template <typename T, bool = is_swappable<T>::value>
- struct is_nothrow_swappable {
- static constexpr bool value =
- noexcept(swap(std::declval<T &>(), std::declval<T &>()));
- };
-
- template <typename T>
- struct is_nothrow_swappable<T, false> : std::false_type {};
-
- } // namespace swappable
- } // namespace detail
-
- using detail::swappable::is_swappable;
- using detail::swappable::is_nothrow_swappable;
-
- // <functional>
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4100)
-#endif
- template <typename F, typename... As>
- inline constexpr auto invoke(F &&f, As &&... as)
- RETURN(lib::forward<F>(f)(lib::forward<As>(as)...))
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
- template <typename B, typename T, typename D>
- inline constexpr auto invoke(T B::*pmv, D &&d)
- RETURN(lib::forward<D>(d).*pmv)
-
- template <typename Pmv, typename Ptr>
- inline constexpr auto invoke(Pmv pmv, Ptr &&ptr)
- RETURN((*lib::forward<Ptr>(ptr)).*pmv)
-
- template <typename B, typename T, typename D, typename... As>
- inline constexpr auto invoke(T B::*pmf, D &&d, As &&... as)
- RETURN((lib::forward<D>(d).*pmf)(lib::forward<As>(as)...))
-
- template <typename Pmf, typename Ptr, typename... As>
- inline constexpr auto invoke(Pmf pmf, Ptr &&ptr, As &&... as)
- RETURN(((*lib::forward<Ptr>(ptr)).*pmf)(lib::forward<As>(as)...))
-
- namespace detail {
-
- template <typename Void, typename, typename...>
- struct invoke_result {};
-
- template <typename F, typename... Args>
- struct invoke_result<void_t<decltype(lib::invoke(
- std::declval<F>(), std::declval<Args>()...))>,
- F,
- Args...>
- : identity<decltype(
- lib::invoke(std::declval<F>(), std::declval<Args>()...))> {};
-
- } // namespace detail
-
- template <typename F, typename... Args>
- using invoke_result = detail::invoke_result<void, F, Args...>;
-
- template <typename F, typename... Args>
- using invoke_result_t = typename invoke_result<F, Args...>::type;
-
- namespace detail {
-
- template <typename Void, typename, typename...>
- struct is_invocable : std::false_type {};
-
- template <typename F, typename... Args>
- struct is_invocable<void_t<invoke_result_t<F, Args...>>, F, Args...>
- : std::true_type {};
-
- template <typename Void, typename, typename, typename...>
- struct is_invocable_r : std::false_type {};
-
- template <typename R, typename F, typename... Args>
- struct is_invocable_r<void_t<invoke_result_t<F, Args...>>,
- R,
- F,
- Args...>
- : std::is_convertible<invoke_result_t<F, Args...>, R> {};
-
- } // namespace detail
-
- template <typename F, typename... Args>
- using is_invocable = detail::is_invocable<void, F, Args...>;
-
- template <typename R, typename F, typename... Args>
- using is_invocable_r = detail::is_invocable_r<void, R, F, Args...>;
-
- // <memory>
-#ifdef MPARK_BUILTIN_ADDRESSOF
- template <typename T>
- inline constexpr T *addressof(T &arg) {
- return __builtin_addressof(arg);
- }
-#else
- namespace detail {
-
- namespace has_addressof_impl {
-
- struct fail;
-
- template <typename T>
- inline fail operator&(T &&);
-
- template <typename T>
- inline static constexpr bool impl() {
- return (std::is_class<T>::value || std::is_union<T>::value) &&
- !std::is_same<decltype(&std::declval<T &>()), fail>::value;
- }
-
- } // namespace has_addressof_impl
-
- template <typename T>
- using has_addressof = bool_constant<has_addressof_impl::impl<T>()>;
-
- template <typename T>
- inline constexpr T *addressof(T &arg, std::true_type) {
- return std::addressof(arg);
- }
-
- template <typename T>
- inline constexpr T *addressof(T &arg, std::false_type) {
- return &arg;
- }
-
- } // namespace detail
-
- template <typename T>
- inline constexpr T *addressof(T &arg) {
- return detail::addressof(arg, detail::has_addressof<T>{});
- }
-#endif
-
- template <typename T>
- inline constexpr T *addressof(const T &&) = delete;
-
- } // namespace cpp17
-
- template <typename T>
- struct remove_all_extents : identity<T> {};
-
- template <typename T, std::size_t N>
- struct remove_all_extents<array<T, N>> : remove_all_extents<T> {};
-
- template <typename T>
- using remove_all_extents_t = typename remove_all_extents<T>::type;
-
- template <std::size_t N>
- using size_constant = std::integral_constant<std::size_t, N>;
-
- template <std::size_t I, typename T>
- struct indexed_type : size_constant<I>, identity<T> {};
-
- template <bool... Bs>
- using all = std::is_same<integer_sequence<bool, true, Bs...>,
- integer_sequence<bool, Bs..., true>>;
-
-#ifdef MPARK_TYPE_PACK_ELEMENT
- template <std::size_t I, typename... Ts>
- using type_pack_element_t = __type_pack_element<I, Ts...>;
-#else
- template <std::size_t I, typename... Ts>
- struct type_pack_element_impl {
- private:
- template <typename>
- struct set;
-
- template <std::size_t... Is>
- struct set<index_sequence<Is...>> : indexed_type<Is, Ts>... {};
-
- template <typename T>
- inline static std::enable_if<true, T> impl(indexed_type<I, T>);
-
- inline static std::enable_if<false> impl(...);
-
- public:
- using type = decltype(impl(set<index_sequence_for<Ts...>>{}));
- };
-
- template <std::size_t I, typename... Ts>
- using type_pack_element = typename type_pack_element_impl<I, Ts...>::type;
-
- template <std::size_t I, typename... Ts>
- using type_pack_element_t = typename type_pack_element<I, Ts...>::type;
-#endif
-
-#ifdef MPARK_TRIVIALITY_TYPE_TRAITS
- using std::is_trivially_copy_constructible;
- using std::is_trivially_move_constructible;
- using std::is_trivially_copy_assignable;
- using std::is_trivially_move_assignable;
-#else
- template <typename T>
- struct is_trivially_copy_constructible
- : bool_constant<
- std::is_copy_constructible<T>::value && __has_trivial_copy(T)> {};
-
- template <typename T>
- struct is_trivially_move_constructible : bool_constant<__is_trivial(T)> {};
-
- template <typename T>
- struct is_trivially_copy_assignable
- : bool_constant<
- std::is_copy_assignable<T>::value && __has_trivial_assign(T)> {};
-
- template <typename T>
- struct is_trivially_move_assignable : bool_constant<__is_trivial(T)> {};
-#endif
-
- template <typename T, bool>
- struct dependent_type : T {};
-
- template <typename Is, std::size_t J>
- struct push_back;
-
- template <typename Is, std::size_t J>
- using push_back_t = typename push_back<Is, J>::type;
-
- template <std::size_t... Is, std::size_t J>
- struct push_back<index_sequence<Is...>, J> {
- using type = index_sequence<Is..., J>;
- };
-
- } // namespace lib
-} // namespace mpark
-
-#undef RETURN
-
-#endif // MPARK_LIB_HPP
-
-
-namespace mpark {
-
-#ifdef MPARK_RETURN_TYPE_DEDUCTION
-
-#define AUTO auto
-#define AUTO_RETURN(...) { return __VA_ARGS__; }
-
-#define AUTO_REFREF auto &&
-#define AUTO_REFREF_RETURN(...) { return __VA_ARGS__; }
-
-#define DECLTYPE_AUTO decltype(auto)
-#define DECLTYPE_AUTO_RETURN(...) { return __VA_ARGS__; }
-
-#else
-
-#define AUTO auto
-#define AUTO_RETURN(...) \
- -> lib::decay_t<decltype(__VA_ARGS__)> { return __VA_ARGS__; }
-
-#define AUTO_REFREF auto
-#define AUTO_REFREF_RETURN(...) \
- -> decltype((__VA_ARGS__)) { \
- static_assert(std::is_reference<decltype((__VA_ARGS__))>::value, ""); \
- return __VA_ARGS__; \
- }
-
-#define DECLTYPE_AUTO auto
-#define DECLTYPE_AUTO_RETURN(...) \
- -> decltype(__VA_ARGS__) { return __VA_ARGS__; }
-
-#endif
-
- class bad_variant_access : public std::exception {
- public:
- virtual const char *what() const noexcept { return "bad_variant_access"; }
- };
-
- [[noreturn]] inline void throw_bad_variant_access() {
-#ifdef MPARK_EXCEPTIONS
- throw bad_variant_access{};
-#else
- std::terminate();
-#ifdef MPARK_BUILTIN_UNREACHABLE
- __builtin_unreachable();
-#endif
-#endif
- }
-
- template <typename... Ts>
- class variant;
-
- template <typename T>
- struct variant_size;
-
-#ifdef MPARK_VARIABLE_TEMPLATES
- template <typename T>
- constexpr std::size_t variant_size_v = variant_size<T>::value;
-#endif
-
- template <typename T>
- struct variant_size<const T> : variant_size<T> {};
-
- template <typename T>
- struct variant_size<volatile T> : variant_size<T> {};
-
- template <typename T>
- struct variant_size<const volatile T> : variant_size<T> {};
-
- template <typename... Ts>
- struct variant_size<variant<Ts...>> : lib::size_constant<sizeof...(Ts)> {};
-
- template <std::size_t I, typename T>
- struct variant_alternative;
-
- template <std::size_t I, typename T>
- using variant_alternative_t = typename variant_alternative<I, T>::type;
-
- template <std::size_t I, typename T>
- struct variant_alternative<I, const T>
- : std::add_const<variant_alternative_t<I, T>> {};
-
- template <std::size_t I, typename T>
- struct variant_alternative<I, volatile T>
- : std::add_volatile<variant_alternative_t<I, T>> {};
-
- template <std::size_t I, typename T>
- struct variant_alternative<I, const volatile T>
- : std::add_cv<variant_alternative_t<I, T>> {};
-
- template <std::size_t I, typename... Ts>
- struct variant_alternative<I, variant<Ts...>> {
- static_assert(I < sizeof...(Ts),
- "Index out of bounds in std::variant_alternative<>");
- using type = lib::type_pack_element_t<I, Ts...>;
- };
-
- constexpr std::size_t variant_npos = static_cast<std::size_t>(-1);
-
- namespace detail {
-
- constexpr std::size_t not_found = static_cast<std::size_t>(-1);
- constexpr std::size_t ambiguous = static_cast<std::size_t>(-2);
-
-#ifdef MPARK_CPP14_CONSTEXPR
- template <typename T, typename... Ts>
- inline constexpr std::size_t find_index() {
- constexpr lib::array<bool, sizeof...(Ts)> matches = {
- {std::is_same<T, Ts>::value...}
- };
- std::size_t result = not_found;
- for (std::size_t i = 0; i < sizeof...(Ts); ++i) {
- if (matches[i]) {
- if (result != not_found) {
- return ambiguous;
- }
- result = i;
- }
- }
- return result;
- }
-#else
- inline constexpr std::size_t find_index_impl(std::size_t result,
- std::size_t) {
- return result;
- }
-
- template <typename... Bs>
- inline constexpr std::size_t find_index_impl(std::size_t result,
- std::size_t idx,
- bool b,
- Bs... bs) {
- return b ? (result != not_found ? ambiguous
- : find_index_impl(idx, idx + 1, bs...))
- : find_index_impl(result, idx + 1, bs...);
- }
-
- template <typename T, typename... Ts>
- inline constexpr std::size_t find_index() {
- return find_index_impl(not_found, 0, std::is_same<T, Ts>::value...);
- }
-#endif
-
- template <std::size_t I>
- using find_index_sfinae_impl =
- lib::enable_if_t<I != not_found && I != ambiguous,
- lib::size_constant<I>>;
-
- template <typename T, typename... Ts>
- using find_index_sfinae = find_index_sfinae_impl<find_index<T, Ts...>()>;
-
- template <std::size_t I>
- struct find_index_checked_impl : lib::size_constant<I> {
- static_assert(I != not_found, "the specified type is not found.");
- static_assert(I != ambiguous, "the specified type is ambiguous.");
- };
-
- template <typename T, typename... Ts>
- using find_index_checked = find_index_checked_impl<find_index<T, Ts...>()>;
-
- struct valueless_t {};
-
- enum class Trait { TriviallyAvailable, Available, Unavailable };
-
- template <typename T,
- template <typename> class IsTriviallyAvailable,
- template <typename> class IsAvailable>
- inline constexpr Trait trait() {
- return IsTriviallyAvailable<T>::value
- ? Trait::TriviallyAvailable
- : IsAvailable<T>::value ? Trait::Available
- : Trait::Unavailable;
- }
-
-#ifdef MPARK_CPP14_CONSTEXPR
- template <typename... Traits>
- inline constexpr Trait common_trait(Traits... traits) {
- Trait result = Trait::TriviallyAvailable;
- for (Trait t : {traits...}) {
- if (static_cast<int>(t) > static_cast<int>(result)) {
- result = t;
- }
- }
- return result;
- }
-#else
- inline constexpr Trait common_trait_impl(Trait result) { return result; }
-
- template <typename... Traits>
- inline constexpr Trait common_trait_impl(Trait result,
- Trait t,
- Traits... ts) {
- return static_cast<int>(t) > static_cast<int>(result)
- ? common_trait_impl(t, ts...)
- : common_trait_impl(result, ts...);
- }
-
- template <typename... Traits>
- inline constexpr Trait common_trait(Traits... ts) {
- return common_trait_impl(Trait::TriviallyAvailable, ts...);
- }
-#endif
-
- template <typename... Ts>
- struct traits {
- static constexpr Trait copy_constructible_trait =
- common_trait(trait<Ts,
- lib::is_trivially_copy_constructible,
- std::is_copy_constructible>()...);
-
- static constexpr Trait move_constructible_trait =
- common_trait(trait<Ts,
- lib::is_trivially_move_constructible,
- std::is_move_constructible>()...);
-
- static constexpr Trait copy_assignable_trait =
- common_trait(copy_constructible_trait,
- trait<Ts,
- lib::is_trivially_copy_assignable,
- std::is_copy_assignable>()...);
-
- static constexpr Trait move_assignable_trait =
- common_trait(move_constructible_trait,
- trait<Ts,
- lib::is_trivially_move_assignable,
- std::is_move_assignable>()...);
-
- static constexpr Trait destructible_trait =
- common_trait(trait<Ts,
- std::is_trivially_destructible,
- std::is_destructible>()...);
- };
-
- namespace access {
-
- struct recursive_union {
-#ifdef MPARK_RETURN_TYPE_DEDUCTION
- template <typename V>
- inline static constexpr auto &&get_alt(V &&v, in_place_index_t<0>) {
- return lib::forward<V>(v).head_;
- }
-
- template <typename V, std::size_t I>
- inline static constexpr auto &&get_alt(V &&v, in_place_index_t<I>) {
- return get_alt(lib::forward<V>(v).tail_, in_place_index_t<I - 1>{});
- }
-#else
- template <std::size_t I, bool Dummy = true>
- struct get_alt_impl {
- template <typename V>
- inline constexpr AUTO_REFREF operator()(V &&v) const
- AUTO_REFREF_RETURN(get_alt_impl<I - 1>{}(lib::forward<V>(v).tail_))
- };
-
- template <bool Dummy>
- struct get_alt_impl<0, Dummy> {
- template <typename V>
- inline constexpr AUTO_REFREF operator()(V &&v) const
- AUTO_REFREF_RETURN(lib::forward<V>(v).head_)
- };
-
- template <typename V, std::size_t I>
- inline static constexpr AUTO_REFREF get_alt(V &&v, in_place_index_t<I>)
- AUTO_REFREF_RETURN(get_alt_impl<I>{}(lib::forward<V>(v)))
-#endif
- };
-
- struct base {
- template <std::size_t I, typename V>
- inline static constexpr AUTO_REFREF get_alt(V &&v)
- AUTO_REFREF_RETURN(recursive_union::get_alt(
- data(lib::forward<V>(v)), in_place_index_t<I>{}))
- };
-
- struct variant {
- template <std::size_t I, typename V>
- inline static constexpr AUTO_REFREF get_alt(V &&v)
- AUTO_REFREF_RETURN(base::get_alt<I>(lib::forward<V>(v).impl_))
- };
-
- } // namespace access
-
- namespace visitation {
-
- struct base {
- template <typename T>
- inline static constexpr const T &at(const T &elem) {
- return elem;
- }
-
- template <typename T, std::size_t N, typename... Is>
- inline static constexpr const lib::remove_all_extents_t<T> &at(
- const lib::array<T, N> &elems, std::size_t i, Is... is) {
- return at(elems[i], is...);
- }
-
- template <typename F, typename... Fs>
- inline static constexpr int visit_visitor_return_type_check() {
- static_assert(lib::all<std::is_same<F, Fs>::value...>::value,
- "`mpark::visit` requires the visitor to have a single "
- "return type.");
- return 0;
- }
-
- template <typename... Fs>
- inline static constexpr lib::array<
- lib::common_type_t<lib::decay_t<Fs>...>,
- sizeof...(Fs)>
- make_farray(Fs &&... fs) {
- using result = lib::array<lib::common_type_t<lib::decay_t<Fs>...>,
- sizeof...(Fs)>;
- return visit_visitor_return_type_check<lib::decay_t<Fs>...>(),
- result{{lib::forward<Fs>(fs)...}};
- }
-
- template <std::size_t... Is>
- struct dispatcher {
- template <typename F, typename... Vs>
- struct impl {
- inline static constexpr DECLTYPE_AUTO dispatch(F f, Vs... vs)
- DECLTYPE_AUTO_RETURN(lib::invoke(
- static_cast<F>(f),
- access::base::get_alt<Is>(static_cast<Vs>(vs))...))
- };
- };
-
- template <typename F, typename... Vs, std::size_t... Is>
- inline static constexpr AUTO make_dispatch(lib::index_sequence<Is...>)
- AUTO_RETURN(&dispatcher<Is...>::template impl<F, Vs...>::dispatch)
-
- template <std::size_t I, typename F, typename... Vs>
- inline static constexpr AUTO make_fdiagonal_impl()
- AUTO_RETURN(make_dispatch<F, Vs...>(
- lib::index_sequence<lib::indexed_type<I, Vs>::value...>{}))
-
- template <typename F, typename... Vs, std::size_t... Is>
- inline static constexpr AUTO make_fdiagonal_impl(
- lib::index_sequence<Is...>)
- AUTO_RETURN(make_farray(make_fdiagonal_impl<Is, F, Vs...>()...))
-
- template <typename F, typename V, typename... Vs>
- inline static constexpr /* auto * */ auto make_fdiagonal()
- -> decltype(make_fdiagonal_impl<F, V, Vs...>(
- lib::make_index_sequence<lib::decay_t<V>::size()>{})) {
- static_assert(lib::all<(lib::decay_t<V>::size() ==
- lib::decay_t<Vs>::size())...>::value,
- "all of the variants must be the same size.");
- return make_fdiagonal_impl<F, V, Vs...>(
- lib::make_index_sequence<lib::decay_t<V>::size()>{});
- }
-
-#ifdef MPARK_RETURN_TYPE_DEDUCTION
- template <typename F, typename... Vs, typename Is>
- inline static constexpr auto make_fmatrix_impl(Is is) {
- return make_dispatch<F, Vs...>(is);
- }
-
- template <typename F,
- typename... Vs,
- typename Is,
- std::size_t... Js,
- typename... Ls>
- inline static constexpr auto make_fmatrix_impl(
- Is, lib::index_sequence<Js...>, Ls... ls) {
- return make_farray(make_fmatrix_impl<F, Vs...>(
- lib::push_back_t<Is, Js>{}, ls...)...);
- }
-
- template <typename F, typename... Vs>
- inline static constexpr auto make_fmatrix() {
- return make_fmatrix_impl<F, Vs...>(
- lib::index_sequence<>{},
- lib::make_index_sequence<lib::decay_t<Vs>::size()>{}...);
- }
-#else
- template <typename F, typename... Vs>
- struct make_fmatrix_impl {
- template <typename...>
- struct impl;
-
- template <typename Is>
- struct impl<Is> {
- inline constexpr AUTO operator()() const
- AUTO_RETURN(make_dispatch<F, Vs...>(Is{}))
- };
-
- template <typename Is, std::size_t... Js, typename... Ls>
- struct impl<Is, lib::index_sequence<Js...>, Ls...> {
- inline constexpr AUTO operator()() const
- AUTO_RETURN(
- make_farray(impl<lib::push_back_t<Is, Js>, Ls...>{}()...))
- };
- };
-
- template <typename F, typename... Vs>
- inline static constexpr AUTO make_fmatrix()
- AUTO_RETURN(
- typename make_fmatrix_impl<F, Vs...>::template impl<
- lib::index_sequence<>,
- lib::make_index_sequence<lib::decay_t<Vs>::size()>...>{}())
-#endif
- }; // namespace base
-
- template <typename F, typename... Vs>
- using FDiagonal = decltype(base::make_fdiagonal<F, Vs...>());
-
- template <typename F, typename... Vs>
- struct fdiagonal {
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4268)
-#endif
- static constexpr FDiagonal<F, Vs...> value =
- base::make_fdiagonal<F, Vs...>();
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
- };
-
- template <typename F, typename... Vs>
- constexpr FDiagonal<F, Vs...> fdiagonal<F, Vs...>::value;
-
- template <typename F, typename... Vs>
- using FMatrix = decltype(base::make_fmatrix<F, Vs...>());
-
- template <typename F, typename... Vs>
- struct fmatrix {
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4268)
-#endif
- static constexpr FMatrix<F, Vs...> value =
- base::make_fmatrix<F, Vs...>();
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
- };
-
- template <typename F, typename... Vs>
- constexpr FMatrix<F, Vs...> fmatrix<F, Vs...>::value;
-
- struct alt {
- template <typename Visitor, typename... Vs>
- inline static constexpr DECLTYPE_AUTO visit_alt_at(std::size_t index,
- Visitor &&visitor,
- Vs &&... vs)
- DECLTYPE_AUTO_RETURN(base::at(
- fdiagonal<Visitor &&,
- decltype(as_base(lib::forward<Vs>(vs)))...>::value,
- index)(lib::forward<Visitor>(visitor),
- as_base(lib::forward<Vs>(vs))...))
-
- template <typename Visitor, typename... Vs>
- inline static constexpr DECLTYPE_AUTO visit_alt(Visitor &&visitor,
- Vs &&... vs)
- DECLTYPE_AUTO_RETURN(base::at(
- fmatrix<Visitor &&,
- decltype(as_base(lib::forward<Vs>(vs)))...>::value,
- vs.index()...)(lib::forward<Visitor>(visitor),
- as_base(lib::forward<Vs>(vs))...))
- };
-
- struct variant {
- private:
- template <typename Visitor, typename... Values>
- struct visit_exhaustive_visitor_check {
- static_assert(
- lib::is_invocable<Visitor, Values...>::value,
- "`mpark::visit` requires the visitor to be exhaustive.");
-
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4100)
-#endif
- inline constexpr DECLTYPE_AUTO operator()(Visitor &&visitor,
- Values &&... values) const
- DECLTYPE_AUTO_RETURN(lib::invoke(lib::forward<Visitor>(visitor),
- lib::forward<Values>(values)...))
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
- };
-
- template <typename Visitor>
- struct value_visitor {
- Visitor &&visitor_;
-
- template <typename... Alts>
- inline constexpr DECLTYPE_AUTO operator()(Alts &&... alts) const
- DECLTYPE_AUTO_RETURN(
- visit_exhaustive_visitor_check<
- Visitor,
- decltype((lib::forward<Alts>(alts).value))...>{}(
- lib::forward<Visitor>(visitor_),
- lib::forward<Alts>(alts).value...))
- };
-
- template <typename Visitor>
- inline static constexpr AUTO make_value_visitor(Visitor &&visitor)
- AUTO_RETURN(value_visitor<Visitor>{lib::forward<Visitor>(visitor)})
-
- public:
- template <typename Visitor, typename... Vs>
- inline static constexpr DECLTYPE_AUTO visit_alt_at(std::size_t index,
- Visitor &&visitor,
- Vs &&... vs)
- DECLTYPE_AUTO_RETURN(
- alt::visit_alt_at(index,
- lib::forward<Visitor>(visitor),
- lib::forward<Vs>(vs).impl_...))
-
- template <typename Visitor, typename... Vs>
- inline static constexpr DECLTYPE_AUTO visit_alt(Visitor &&visitor,
- Vs &&... vs)
- DECLTYPE_AUTO_RETURN(alt::visit_alt(lib::forward<Visitor>(visitor),
- lib::forward<Vs>(vs).impl_...))
-
- template <typename Visitor, typename... Vs>
- inline static constexpr DECLTYPE_AUTO visit_value_at(std::size_t index,
- Visitor &&visitor,
- Vs &&... vs)
- DECLTYPE_AUTO_RETURN(
- visit_alt_at(index,
- make_value_visitor(lib::forward<Visitor>(visitor)),
- lib::forward<Vs>(vs)...))
-
- template <typename Visitor, typename... Vs>
- inline static constexpr DECLTYPE_AUTO visit_value(Visitor &&visitor,
- Vs &&... vs)
- DECLTYPE_AUTO_RETURN(
- visit_alt(make_value_visitor(lib::forward<Visitor>(visitor)),
- lib::forward<Vs>(vs)...))
- };
-
- } // namespace visitation
-
- template <std::size_t Index, typename T>
- struct alt {
- using value_type = T;
-
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4244)
-#endif
- template <typename... Args>
- inline explicit constexpr alt(in_place_t, Args &&... args)
- : value(lib::forward<Args>(args)...) {}
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
- T value;
- };
-
- template <Trait DestructibleTrait, std::size_t Index, typename... Ts>
- union recursive_union;
-
- template <Trait DestructibleTrait, std::size_t Index>
- union recursive_union<DestructibleTrait, Index> {};
-
-#define MPARK_VARIANT_RECURSIVE_UNION(destructible_trait, destructor) \
- template <std::size_t Index, typename T, typename... Ts> \
- union recursive_union<destructible_trait, Index, T, Ts...> { \
- public: \
- inline explicit constexpr recursive_union(valueless_t) noexcept \
- : dummy_{} {} \
- \
- template <typename... Args> \
- inline explicit constexpr recursive_union(in_place_index_t<0>, \
- Args &&... args) \
- : head_(in_place_t{}, lib::forward<Args>(args)...) {} \
- \
- template <std::size_t I, typename... Args> \
- inline explicit constexpr recursive_union(in_place_index_t<I>, \
- Args &&... args) \
- : tail_(in_place_index_t<I - 1>{}, lib::forward<Args>(args)...) {} \
- \
- recursive_union(const recursive_union &) = default; \
- recursive_union(recursive_union &&) = default; \
- \
- destructor \
- \
- recursive_union &operator=(const recursive_union &) = default; \
- recursive_union &operator=(recursive_union &&) = default; \
- \
- private: \
- char dummy_; \
- alt<Index, T> head_; \
- recursive_union<destructible_trait, Index + 1, Ts...> tail_; \
- \
- friend struct access::recursive_union; \
- }
-
- MPARK_VARIANT_RECURSIVE_UNION(Trait::TriviallyAvailable,
- ~recursive_union() = default;);
- MPARK_VARIANT_RECURSIVE_UNION(Trait::Available,
- ~recursive_union() {});
- MPARK_VARIANT_RECURSIVE_UNION(Trait::Unavailable,
- ~recursive_union() = delete;);
-
-#undef MPARK_VARIANT_RECURSIVE_UNION
-
- using index_t = unsigned int;
-
- template <Trait DestructibleTrait, typename... Ts>
- class base {
- public:
- inline explicit constexpr base(valueless_t tag) noexcept
- : data_(tag), index_(static_cast<index_t>(-1)) {}
-
- template <std::size_t I, typename... Args>
- inline explicit constexpr base(in_place_index_t<I>, Args &&... args)
- : data_(in_place_index_t<I>{}, lib::forward<Args>(args)...),
- index_(I) {}
-
- inline constexpr bool valueless_by_exception() const noexcept {
- return index_ == static_cast<index_t>(-1);
- }
-
- inline constexpr std::size_t index() const noexcept {
- return valueless_by_exception() ? variant_npos : index_;
- }
-
- protected:
- using data_t = recursive_union<DestructibleTrait, 0, Ts...>;
-
- friend inline constexpr base &as_base(base &b) { return b; }
- friend inline constexpr const base &as_base(const base &b) { return b; }
- friend inline constexpr base &&as_base(base &&b) { return lib::move(b); }
- friend inline constexpr const base &&as_base(const base &&b) { return lib::move(b); }
-
- friend inline constexpr data_t &data(base &b) { return b.data_; }
- friend inline constexpr const data_t &data(const base &b) { return b.data_; }
- friend inline constexpr data_t &&data(base &&b) { return lib::move(b).data_; }
- friend inline constexpr const data_t &&data(const base &&b) { return lib::move(b).data_; }
-
- inline static constexpr std::size_t size() { return sizeof...(Ts); }
-
- data_t data_;
- index_t index_;
-
- friend struct access::base;
- friend struct visitation::base;
- };
-
- struct dtor {
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4100)
-#endif
- template <typename Alt>
- inline void operator()(Alt &alt) const noexcept { alt.~Alt(); }
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
- };
-
-#if defined(_MSC_VER) && _MSC_VER < 1910
-#define INHERITING_CTOR(type, base) \
- template <typename... Args> \
- inline explicit constexpr type(Args &&... args) \
- : base(lib::forward<Args>(args)...) {}
-#else
-#define INHERITING_CTOR(type, base) using base::base;
-#endif
-
- template <typename Traits, Trait = Traits::destructible_trait>
- class destructor;
-
-#define MPARK_VARIANT_DESTRUCTOR(destructible_trait, definition, destroy) \
- template <typename... Ts> \
- class destructor<traits<Ts...>, destructible_trait> \
- : public base<destructible_trait, Ts...> { \
- using super = base<destructible_trait, Ts...>; \
- \
- public: \
- INHERITING_CTOR(destructor, super) \
- using super::operator=; \
- \
- destructor(const destructor &) = default; \
- destructor(destructor &&) = default; \
- definition \
- destructor &operator=(const destructor &) = default; \
- destructor &operator=(destructor &&) = default; \
- \
- protected: \
- destroy \
- }
-
- MPARK_VARIANT_DESTRUCTOR(
- Trait::TriviallyAvailable,
- ~destructor() = default;,
- inline void destroy() noexcept {
- this->index_ = static_cast<index_t>(-1);
- });
-
- MPARK_VARIANT_DESTRUCTOR(
- Trait::Available,
- ~destructor() { destroy(); },
- inline void destroy() noexcept {
- if (!this->valueless_by_exception()) {
- visitation::alt::visit_alt(dtor{}, *this);
- }
- this->index_ = static_cast<index_t>(-1);
- });
-
- MPARK_VARIANT_DESTRUCTOR(
- Trait::Unavailable,
- ~destructor() = delete;,
- inline void destroy() noexcept = delete;);
-
-#undef MPARK_VARIANT_DESTRUCTOR
-
- template <typename Traits>
- class constructor : public destructor<Traits> {
- using super = destructor<Traits>;
-
- public:
- INHERITING_CTOR(constructor, super)
- using super::operator=;
-
- protected:
-#ifndef MPARK_GENERIC_LAMBDAS
- struct ctor {
- template <typename LhsAlt, typename RhsAlt>
- inline void operator()(LhsAlt &lhs_alt, RhsAlt &&rhs_alt) const {
- constructor::construct_alt(lhs_alt,
- lib::forward<RhsAlt>(rhs_alt).value);
- }
- };
-#endif
-
- template <std::size_t I, typename T, typename... Args>
- inline static T &construct_alt(alt<I, T> &a, Args &&... args) {
- ::new (static_cast<void *>(lib::addressof(a)))
- alt<I, T>(in_place_t{}, lib::forward<Args>(args)...);
- return a.value;
- }
-
- template <typename Rhs>
- inline static void generic_construct(constructor &lhs, Rhs &&rhs) {
- lhs.destroy();
- if (!rhs.valueless_by_exception()) {
- visitation::alt::visit_alt_at(
- rhs.index(),
-#ifdef MPARK_GENERIC_LAMBDAS
- [](auto &lhs_alt, auto &&rhs_alt) {
- constructor::construct_alt(
- lhs_alt, lib::forward<decltype(rhs_alt)>(rhs_alt).value);
- }
-#else
- ctor{}
-#endif
- ,
- lhs,
- lib::forward<Rhs>(rhs));
- lhs.index_ = rhs.index_;
- }
- }
- };
-
- template <typename Traits, Trait = Traits::move_constructible_trait>
- class move_constructor;
-
-#define MPARK_VARIANT_MOVE_CONSTRUCTOR(move_constructible_trait, definition) \
- template <typename... Ts> \
- class move_constructor<traits<Ts...>, move_constructible_trait> \
- : public constructor<traits<Ts...>> { \
- using super = constructor<traits<Ts...>>; \
- \
- public: \
- INHERITING_CTOR(move_constructor, super) \
- using super::operator=; \
- \
- move_constructor(const move_constructor &) = default; \
- definition \
- ~move_constructor() = default; \
- move_constructor &operator=(const move_constructor &) = default; \
- move_constructor &operator=(move_constructor &&) = default; \
- }
-
- MPARK_VARIANT_MOVE_CONSTRUCTOR(
- Trait::TriviallyAvailable,
- move_constructor(move_constructor &&that) = default;);
-
- MPARK_VARIANT_MOVE_CONSTRUCTOR(
- Trait::Available,
- move_constructor(move_constructor &&that) noexcept(
- lib::all<std::is_nothrow_move_constructible<Ts>::value...>::value)
- : move_constructor(valueless_t{}) {
- this->generic_construct(*this, lib::move(that));
- });
-
- MPARK_VARIANT_MOVE_CONSTRUCTOR(
- Trait::Unavailable,
- move_constructor(move_constructor &&) = delete;);
-
-#undef MPARK_VARIANT_MOVE_CONSTRUCTOR
-
- template <typename Traits, Trait = Traits::copy_constructible_trait>
- class copy_constructor;
-
-#define MPARK_VARIANT_COPY_CONSTRUCTOR(copy_constructible_trait, definition) \
- template <typename... Ts> \
- class copy_constructor<traits<Ts...>, copy_constructible_trait> \
- : public move_constructor<traits<Ts...>> { \
- using super = move_constructor<traits<Ts...>>; \
- \
- public: \
- INHERITING_CTOR(copy_constructor, super) \
- using super::operator=; \
- \
- definition \
- copy_constructor(copy_constructor &&) = default; \
- ~copy_constructor() = default; \
- copy_constructor &operator=(const copy_constructor &) = default; \
- copy_constructor &operator=(copy_constructor &&) = default; \
- }
-
- MPARK_VARIANT_COPY_CONSTRUCTOR(
- Trait::TriviallyAvailable,
- copy_constructor(const copy_constructor &that) = default;);
-
- MPARK_VARIANT_COPY_CONSTRUCTOR(
- Trait::Available,
- copy_constructor(const copy_constructor &that)
- : copy_constructor(valueless_t{}) {
- this->generic_construct(*this, that);
- });
-
- MPARK_VARIANT_COPY_CONSTRUCTOR(
- Trait::Unavailable,
- copy_constructor(const copy_constructor &) = delete;);
-
-#undef MPARK_VARIANT_COPY_CONSTRUCTOR
-
- template <typename Traits>
- class assignment : public copy_constructor<Traits> {
- using super = copy_constructor<Traits>;
-
- public:
- INHERITING_CTOR(assignment, super)
- using super::operator=;
-
- template <std::size_t I, typename... Args>
- inline /* auto & */ auto emplace(Args &&... args)
- -> decltype(this->construct_alt(access::base::get_alt<I>(*this),
- lib::forward<Args>(args)...)) {
- this->destroy();
- auto &result = this->construct_alt(access::base::get_alt<I>(*this),
- lib::forward<Args>(args)...);
- this->index_ = I;
- return result;
- }
-
- protected:
-#ifndef MPARK_GENERIC_LAMBDAS
- template <typename That>
- struct assigner {
- template <typename ThisAlt, typename ThatAlt>
- inline void operator()(ThisAlt &this_alt, ThatAlt &&that_alt) const {
- self->assign_alt(this_alt, lib::forward<ThatAlt>(that_alt).value);
- }
- assignment *self;
- };
-#endif
-
- template <std::size_t I, typename T, typename Arg>
- inline void assign_alt(alt<I, T> &a, Arg &&arg) {
- if (this->index() == I) {
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4244)
-#endif
- a.value = lib::forward<Arg>(arg);
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
- } else {
- struct {
- void operator()(std::true_type) const {
- this_->emplace<I>(lib::forward<Arg>(arg_));
- }
- void operator()(std::false_type) const {
- this_->emplace<I>(T(lib::forward<Arg>(arg_)));
- }
- assignment *this_;
- Arg &&arg_;
- } impl{this, lib::forward<Arg>(arg)};
- impl(lib::bool_constant<
- std::is_nothrow_constructible<T, Arg>::value ||
- !std::is_nothrow_move_constructible<T>::value>{});
- }
- }
-
- template <typename That>
- inline void generic_assign(That &&that) {
- if (this->valueless_by_exception() && that.valueless_by_exception()) {
- // do nothing.
- } else if (that.valueless_by_exception()) {
- this->destroy();
- } else {
- visitation::alt::visit_alt_at(
- that.index(),
-#ifdef MPARK_GENERIC_LAMBDAS
- [this](auto &this_alt, auto &&that_alt) {
- this->assign_alt(
- this_alt, lib::forward<decltype(that_alt)>(that_alt).value);
- }
-#else
- assigner<That>{this}
-#endif
- ,
- *this,
- lib::forward<That>(that));
- }
- }
- };
-
- template <typename Traits, Trait = Traits::move_assignable_trait>
- class move_assignment;
-
-#define MPARK_VARIANT_MOVE_ASSIGNMENT(move_assignable_trait, definition) \
- template <typename... Ts> \
- class move_assignment<traits<Ts...>, move_assignable_trait> \
- : public assignment<traits<Ts...>> { \
- using super = assignment<traits<Ts...>>; \
- \
- public: \
- INHERITING_CTOR(move_assignment, super) \
- using super::operator=; \
- \
- move_assignment(const move_assignment &) = default; \
- move_assignment(move_assignment &&) = default; \
- ~move_assignment() = default; \
- move_assignment &operator=(const move_assignment &) = default; \
- definition \
- }
-
- MPARK_VARIANT_MOVE_ASSIGNMENT(
- Trait::TriviallyAvailable,
- move_assignment &operator=(move_assignment &&that) = default;);
-
- MPARK_VARIANT_MOVE_ASSIGNMENT(
- Trait::Available,
- move_assignment &
- operator=(move_assignment &&that) noexcept(
- lib::all<(std::is_nothrow_move_constructible<Ts>::value &&
- std::is_nothrow_move_assignable<Ts>::value)...>::value) {
- this->generic_assign(lib::move(that));
- return *this;
- });
-
- MPARK_VARIANT_MOVE_ASSIGNMENT(
- Trait::Unavailable,
- move_assignment &operator=(move_assignment &&) = delete;);
-
-#undef MPARK_VARIANT_MOVE_ASSIGNMENT
-
- template <typename Traits, Trait = Traits::copy_assignable_trait>
- class copy_assignment;
-
-#define MPARK_VARIANT_COPY_ASSIGNMENT(copy_assignable_trait, definition) \
- template <typename... Ts> \
- class copy_assignment<traits<Ts...>, copy_assignable_trait> \
- : public move_assignment<traits<Ts...>> { \
- using super = move_assignment<traits<Ts...>>; \
- \
- public: \
- INHERITING_CTOR(copy_assignment, super) \
- using super::operator=; \
- \
- copy_assignment(const copy_assignment &) = default; \
- copy_assignment(copy_assignment &&) = default; \
- ~copy_assignment() = default; \
- definition \
- copy_assignment &operator=(copy_assignment &&) = default; \
- }
-
- MPARK_VARIANT_COPY_ASSIGNMENT(
- Trait::TriviallyAvailable,
- copy_assignment &operator=(const copy_assignment &that) = default;);
-
- MPARK_VARIANT_COPY_ASSIGNMENT(
- Trait::Available,
- copy_assignment &operator=(const copy_assignment &that) {
- this->generic_assign(that);
- return *this;
- });
-
- MPARK_VARIANT_COPY_ASSIGNMENT(
- Trait::Unavailable,
- copy_assignment &operator=(const copy_assignment &) = delete;);
-
-#undef MPARK_VARIANT_COPY_ASSIGNMENT
-
- template <typename... Ts>
- class impl : public copy_assignment<traits<Ts...>> {
- using super = copy_assignment<traits<Ts...>>;
-
- public:
- INHERITING_CTOR(impl, super)
- using super::operator=;
-
- template <std::size_t I, typename Arg>
- inline void assign(Arg &&arg) {
- this->assign_alt(access::base::get_alt<I>(*this),
- lib::forward<Arg>(arg));
- }
-
- inline void swap(impl &that) {
- if (this->valueless_by_exception() && that.valueless_by_exception()) {
- // do nothing.
- } else if (this->index() == that.index()) {
- visitation::alt::visit_alt_at(this->index(),
-#ifdef MPARK_GENERIC_LAMBDAS
- [](auto &this_alt, auto &that_alt) {
- using std::swap;
- swap(this_alt.value,
- that_alt.value);
- }
-#else
- swapper{}
-#endif
- ,
- *this,
- that);
- } else {
- impl *lhs = this;
- impl *rhs = lib::addressof(that);
- if (lhs->move_nothrow() && !rhs->move_nothrow()) {
- std::swap(lhs, rhs);
- }
- impl tmp(lib::move(*rhs));
-#ifdef MPARK_EXCEPTIONS
- // EXTENSION: When the move construction of `lhs` into `rhs` throws
- // and `tmp` is nothrow move constructible then we move `tmp` back
- // into `rhs` and provide the strong exception safety guarantee.
- try {
- this->generic_construct(*rhs, lib::move(*lhs));
- } catch (...) {
- if (tmp.move_nothrow()) {
- this->generic_construct(*rhs, lib::move(tmp));
- }
- throw;
- }
-#else
- this->generic_construct(*rhs, lib::move(*lhs));
-#endif
- this->generic_construct(*lhs, lib::move(tmp));
- }
- }
-
- private:
-#ifndef MPARK_GENERIC_LAMBDAS
- struct swapper {
- template <typename ThisAlt, typename ThatAlt>
- inline void operator()(ThisAlt &this_alt, ThatAlt &that_alt) const {
- using std::swap;
- swap(this_alt.value, that_alt.value);
- }
- };
-#endif
-
- inline constexpr bool move_nothrow() const {
- return this->valueless_by_exception() ||
- lib::array<bool, sizeof...(Ts)>{
- {std::is_nothrow_move_constructible<Ts>::value...}
- }[this->index()];
- }
- };
-
- template <std::size_t I, typename T>
- struct overload_leaf {
- using F = lib::size_constant<I> (*)(T);
- operator F() const { return nullptr; }
- };
-
- template <typename... Ts>
- struct overload_impl {
- private:
- template <typename>
- struct impl;
-
- template <std::size_t... Is>
- struct impl<lib::index_sequence<Is...>> : overload_leaf<Is, Ts>... {};
-
- public:
- using type = impl<lib::index_sequence_for<Ts...>>;
- };
-
- template <typename... Ts>
- using overload = typename overload_impl<Ts...>::type;
-
- template <typename T, typename... Ts>
- using best_match = lib::invoke_result_t<overload<Ts...>, T &&>;
-
- template <typename T>
- struct is_in_place_index : std::false_type {};
-
- template <std::size_t I>
- struct is_in_place_index<in_place_index_t<I>> : std::true_type {};
-
- template <typename T>
- struct is_in_place_type : std::false_type {};
-
- template <typename T>
- struct is_in_place_type<in_place_type_t<T>> : std::true_type {};
-
- } // detail
-
- template <typename... Ts>
- class variant {
- static_assert(0 < sizeof...(Ts),
- "variant must consist of at least one alternative.");
-
- static_assert(lib::all<!std::is_array<Ts>::value...>::value,
- "variant can not have an array type as an alternative.");
-
- static_assert(lib::all<!std::is_reference<Ts>::value...>::value,
- "variant can not have a reference type as an alternative.");
-
- static_assert(lib::all<!std::is_void<Ts>::value...>::value,
- "variant can not have a void type as an alternative.");
-
- public:
- template <
- typename Front = lib::type_pack_element_t<0, Ts...>,
- lib::enable_if_t<std::is_default_constructible<Front>::value, int> = 0>
- inline constexpr variant()
- : impl_(in_place_index_t<0>{}) {}
-
- variant(const variant &) = default;
- variant(variant &&) = default;
-
- template <
- typename Arg,
- typename Decayed = lib::decay_t<Arg>,
- lib::enable_if_t<!std::is_same<Decayed, variant>::value, int> = 0,
- lib::enable_if_t<!detail::is_in_place_index<Decayed>::value, int> = 0,
- lib::enable_if_t<!detail::is_in_place_type<Decayed>::value, int> = 0,
- std::size_t I = detail::best_match<Arg, Ts...>::value,
- typename T = lib::type_pack_element_t<I, Ts...>,
- lib::enable_if_t<std::is_constructible<T, Arg>::value, int> = 0>
- inline constexpr variant(Arg &&arg) noexcept(
- std::is_nothrow_constructible<T, Arg>::value)
- : impl_(in_place_index_t<I>{}, lib::forward<Arg>(arg)) {}
-
- template <
- std::size_t I,
- typename... Args,
- typename T = lib::type_pack_element_t<I, Ts...>,
- lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
- inline explicit constexpr variant(
- in_place_index_t<I>,
- Args &&... args) noexcept(std::is_nothrow_constructible<T,
- Args...>::value)
- : impl_(in_place_index_t<I>{}, lib::forward<Args>(args)...) {}
-
- template <
- std::size_t I,
- typename Up,
- typename... Args,
- typename T = lib::type_pack_element_t<I, Ts...>,
- lib::enable_if_t<std::is_constructible<T,
- std::initializer_list<Up> &,
- Args...>::value,
- int> = 0>
- inline explicit constexpr variant(
- in_place_index_t<I>,
- std::initializer_list<Up> il,
- Args &&... args) noexcept(std::
- is_nothrow_constructible<
- T,
- std::initializer_list<Up> &,
- Args...>::value)
- : impl_(in_place_index_t<I>{}, il, lib::forward<Args>(args)...) {}
-
- template <
- typename T,
- typename... Args,
- std::size_t I = detail::find_index_sfinae<T, Ts...>::value,
- lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
- inline explicit constexpr variant(
- in_place_type_t<T>,
- Args &&... args) noexcept(std::is_nothrow_constructible<T,
- Args...>::value)
- : impl_(in_place_index_t<I>{}, lib::forward<Args>(args)...) {}
-
- template <
- typename T,
- typename Up,
- typename... Args,
- std::size_t I = detail::find_index_sfinae<T, Ts...>::value,
- lib::enable_if_t<std::is_constructible<T,
- std::initializer_list<Up> &,
- Args...>::value,
- int> = 0>
- inline explicit constexpr variant(
- in_place_type_t<T>,
- std::initializer_list<Up> il,
- Args &&... args) noexcept(std::
- is_nothrow_constructible<
- T,
- std::initializer_list<Up> &,
- Args...>::value)
- : impl_(in_place_index_t<I>{}, il, lib::forward<Args>(args)...) {}
-
- ~variant() = default;
-
- variant &operator=(const variant &) = default;
- variant &operator=(variant &&) = default;
-
- template <typename Arg,
- lib::enable_if_t<!std::is_same<lib::decay_t<Arg>, variant>::value,
- int> = 0,
- std::size_t I = detail::best_match<Arg, Ts...>::value,
- typename T = lib::type_pack_element_t<I, Ts...>,
- lib::enable_if_t<(std::is_assignable<T &, Arg>::value &&
- std::is_constructible<T, Arg>::value),
- int> = 0>
- inline variant &operator=(Arg &&arg) {
- impl_.template assign<I>(lib::forward<Arg>(arg));
- return *this;
- }
-
- template <
- std::size_t I,
- typename... Args,
- typename T = lib::type_pack_element_t<I, Ts...>,
- lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
- inline T &emplace(Args &&... args) {
- return impl_.template emplace<I>(lib::forward<Args>(args)...);
- }
-
- template <
- std::size_t I,
- typename Up,
- typename... Args,
- typename T = lib::type_pack_element_t<I, Ts...>,
- lib::enable_if_t<std::is_constructible<T,
- std::initializer_list<Up> &,
- Args...>::value,
- int> = 0>
- inline T &emplace(std::initializer_list<Up> il, Args &&... args) {
- return impl_.template emplace<I>(il, lib::forward<Args>(args)...);
- }
-
- template <
- typename T,
- typename... Args,
- std::size_t I = detail::find_index_sfinae<T, Ts...>::value,
- lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
- inline T &emplace(Args &&... args) {
- return impl_.template emplace<I>(lib::forward<Args>(args)...);
- }
-
- template <
- typename T,
- typename Up,
- typename... Args,
- std::size_t I = detail::find_index_sfinae<T, Ts...>::value,
- lib::enable_if_t<std::is_constructible<T,
- std::initializer_list<Up> &,
- Args...>::value,
- int> = 0>
- inline T &emplace(std::initializer_list<Up> il, Args &&... args) {
- return impl_.template emplace<I>(il, lib::forward<Args>(args)...);
- }
-
- inline constexpr bool valueless_by_exception() const noexcept {
- return impl_.valueless_by_exception();
- }
-
- inline constexpr std::size_t index() const noexcept {
- return impl_.index();
- }
-
- template <bool Dummy = true,
- lib::enable_if_t<
- lib::all<Dummy,
- (lib::dependent_type<std::is_move_constructible<Ts>,
- Dummy>::value &&
- lib::dependent_type<lib::is_swappable<Ts>,
- Dummy>::value)...>::value,
- int> = 0>
- inline void swap(variant &that) noexcept(
- lib::all<(std::is_nothrow_move_constructible<Ts>::value &&
- lib::is_nothrow_swappable<Ts>::value)...>::value) {
- impl_.swap(that.impl_);
- }
-
- private:
- detail::impl<Ts...> impl_;
-
- friend struct detail::access::variant;
- friend struct detail::visitation::variant;
- };
-
- template <std::size_t I, typename... Ts>
- inline constexpr bool holds_alternative(const variant<Ts...> &v) noexcept {
- return v.index() == I;
- }
-
- template <typename T, typename... Ts>
- inline constexpr bool holds_alternative(const variant<Ts...> &v) noexcept {
- return holds_alternative<detail::find_index_checked<T, Ts...>::value>(v);
- }
-
- namespace detail {
- template <std::size_t I, typename V>
- struct generic_get_impl {
- constexpr generic_get_impl(int) {}
-
- constexpr AUTO_REFREF operator()(V &&v) const
- AUTO_REFREF_RETURN(
- access::variant::get_alt<I>(lib::forward<V>(v)).value)
- };
-
- template <std::size_t I, typename V>
- inline constexpr AUTO_REFREF generic_get(V &&v)
- AUTO_REFREF_RETURN(generic_get_impl<I, V>(
- holds_alternative<I>(v) ? 0 : (throw_bad_variant_access(), 0))(
- lib::forward<V>(v)))
- } // namespace detail
-
- template <std::size_t I, typename... Ts>
- inline constexpr variant_alternative_t<I, variant<Ts...>> &get(
- variant<Ts...> &v) {
- return detail::generic_get<I>(v);
- }
-
- template <std::size_t I, typename... Ts>
- inline constexpr variant_alternative_t<I, variant<Ts...>> &&get(
- variant<Ts...> &&v) {
- return detail::generic_get<I>(lib::move(v));
- }
-
- template <std::size_t I, typename... Ts>
- inline constexpr const variant_alternative_t<I, variant<Ts...>> &get(
- const variant<Ts...> &v) {
- return detail::generic_get<I>(v);
- }
-
- template <std::size_t I, typename... Ts>
- inline constexpr const variant_alternative_t<I, variant<Ts...>> &&get(
- const variant<Ts...> &&v) {
- return detail::generic_get<I>(lib::move(v));
- }
-
- template <typename T, typename... Ts>
- inline constexpr T &get(variant<Ts...> &v) {
- return get<detail::find_index_checked<T, Ts...>::value>(v);
- }
-
- template <typename T, typename... Ts>
- inline constexpr T &&get(variant<Ts...> &&v) {
- return get<detail::find_index_checked<T, Ts...>::value>(lib::move(v));
- }
-
- template <typename T, typename... Ts>
- inline constexpr const T &get(const variant<Ts...> &v) {
- return get<detail::find_index_checked<T, Ts...>::value>(v);
- }
-
- template <typename T, typename... Ts>
- inline constexpr const T &&get(const variant<Ts...> &&v) {
- return get<detail::find_index_checked<T, Ts...>::value>(lib::move(v));
- }
-
- namespace detail {
-
- template <std::size_t I, typename V>
- inline constexpr /* auto * */ AUTO generic_get_if(V *v) noexcept
- AUTO_RETURN(v && holds_alternative<I>(*v)
- ? lib::addressof(access::variant::get_alt<I>(*v).value)
- : nullptr)
-
- } // namespace detail
-
- template <std::size_t I, typename... Ts>
- inline constexpr lib::add_pointer_t<variant_alternative_t<I, variant<Ts...>>>
- get_if(variant<Ts...> *v) noexcept {
- return detail::generic_get_if<I>(v);
- }
-
- template <std::size_t I, typename... Ts>
- inline constexpr lib::add_pointer_t<
- const variant_alternative_t<I, variant<Ts...>>>
- get_if(const variant<Ts...> *v) noexcept {
- return detail::generic_get_if<I>(v);
- }
-
- template <typename T, typename... Ts>
- inline constexpr lib::add_pointer_t<T>
- get_if(variant<Ts...> *v) noexcept {
- return get_if<detail::find_index_checked<T, Ts...>::value>(v);
- }
-
- template <typename T, typename... Ts>
- inline constexpr lib::add_pointer_t<const T>
- get_if(const variant<Ts...> *v) noexcept {
- return get_if<detail::find_index_checked<T, Ts...>::value>(v);
- }
-
- template <typename... Ts>
- inline constexpr bool operator==(const variant<Ts...> &lhs,
- const variant<Ts...> &rhs) {
- using detail::visitation::variant;
- using lib::equal_to;
-#ifdef MPARK_CPP14_CONSTEXPR
- if (lhs.index() != rhs.index()) return false;
- if (lhs.valueless_by_exception()) return true;
- return variant::visit_value_at(lhs.index(), equal_to{}, lhs, rhs);
-#else
- return lhs.index() == rhs.index() &&
- (lhs.valueless_by_exception() ||
- variant::visit_value_at(lhs.index(), equal_to{}, lhs, rhs));
-#endif
- }
-
- template <typename... Ts>
- inline constexpr bool operator!=(const variant<Ts...> &lhs,
- const variant<Ts...> &rhs) {
- using detail::visitation::variant;
- using lib::not_equal_to;
-#ifdef MPARK_CPP14_CONSTEXPR
- if (lhs.index() != rhs.index()) return true;
- if (lhs.valueless_by_exception()) return false;
- return variant::visit_value_at(lhs.index(), not_equal_to{}, lhs, rhs);
-#else
- return lhs.index() != rhs.index() ||
- (!lhs.valueless_by_exception() &&
- variant::visit_value_at(lhs.index(), not_equal_to{}, lhs, rhs));
-#endif
- }
-
- template <typename... Ts>
- inline constexpr bool operator<(const variant<Ts...> &lhs,
- const variant<Ts...> &rhs) {
- using detail::visitation::variant;
- using lib::less;
-#ifdef MPARK_CPP14_CONSTEXPR
- if (rhs.valueless_by_exception()) return false;
- if (lhs.valueless_by_exception()) return true;
- if (lhs.index() < rhs.index()) return true;
- if (lhs.index() > rhs.index()) return false;
- return variant::visit_value_at(lhs.index(), less{}, lhs, rhs);
-#else
- return !rhs.valueless_by_exception() &&
- (lhs.valueless_by_exception() || lhs.index() < rhs.index() ||
- (lhs.index() == rhs.index() &&
- variant::visit_value_at(lhs.index(), less{}, lhs, rhs)));
-#endif
- }
-
- template <typename... Ts>
- inline constexpr bool operator>(const variant<Ts...> &lhs,
- const variant<Ts...> &rhs) {
- using detail::visitation::variant;
- using lib::greater;
-#ifdef MPARK_CPP14_CONSTEXPR
- if (lhs.valueless_by_exception()) return false;
- if (rhs.valueless_by_exception()) return true;
- if (lhs.index() > rhs.index()) return true;
- if (lhs.index() < rhs.index()) return false;
- return variant::visit_value_at(lhs.index(), greater{}, lhs, rhs);
-#else
- return !lhs.valueless_by_exception() &&
- (rhs.valueless_by_exception() || lhs.index() > rhs.index() ||
- (lhs.index() == rhs.index() &&
- variant::visit_value_at(lhs.index(), greater{}, lhs, rhs)));
-#endif
- }
-
- template <typename... Ts>
- inline constexpr bool operator<=(const variant<Ts...> &lhs,
- const variant<Ts...> &rhs) {
- using detail::visitation::variant;
- using lib::less_equal;
-#ifdef MPARK_CPP14_CONSTEXPR
- if (lhs.valueless_by_exception()) return true;
- if (rhs.valueless_by_exception()) return false;
- if (lhs.index() < rhs.index()) return true;
- if (lhs.index() > rhs.index()) return false;
- return variant::visit_value_at(lhs.index(), less_equal{}, lhs, rhs);
-#else
- return lhs.valueless_by_exception() ||
- (!rhs.valueless_by_exception() &&
- (lhs.index() < rhs.index() ||
- (lhs.index() == rhs.index() &&
- variant::visit_value_at(lhs.index(), less_equal{}, lhs, rhs))));
-#endif
- }
-
- template <typename... Ts>
- inline constexpr bool operator>=(const variant<Ts...> &lhs,
- const variant<Ts...> &rhs) {
- using detail::visitation::variant;
- using lib::greater_equal;
-#ifdef MPARK_CPP14_CONSTEXPR
- if (rhs.valueless_by_exception()) return true;
- if (lhs.valueless_by_exception()) return false;
- if (lhs.index() > rhs.index()) return true;
- if (lhs.index() < rhs.index()) return false;
- return variant::visit_value_at(lhs.index(), greater_equal{}, lhs, rhs);
-#else
- return rhs.valueless_by_exception() ||
- (!lhs.valueless_by_exception() &&
- (lhs.index() > rhs.index() ||
- (lhs.index() == rhs.index() &&
- variant::visit_value_at(
- lhs.index(), greater_equal{}, lhs, rhs))));
-#endif
- }
-
- struct monostate {};
-
- inline constexpr bool operator<(monostate, monostate) noexcept {
- return false;
- }
-
- inline constexpr bool operator>(monostate, monostate) noexcept {
- return false;
- }
-
- inline constexpr bool operator<=(monostate, monostate) noexcept {
- return true;
- }
-
- inline constexpr bool operator>=(monostate, monostate) noexcept {
- return true;
- }
-
- inline constexpr bool operator==(monostate, monostate) noexcept {
- return true;
- }
-
- inline constexpr bool operator!=(monostate, monostate) noexcept {
- return false;
- }
-
-#ifdef MPARK_CPP14_CONSTEXPR
- namespace detail {
-
- inline constexpr bool all(std::initializer_list<bool> bs) {
- for (bool b : bs) {
- if (!b) {
- return false;
- }
- }
- return true;
- }
-
- } // namespace detail
-
- template <typename Visitor, typename... Vs>
- inline constexpr decltype(auto) visit(Visitor &&visitor, Vs &&... vs) {
- return (detail::all({!vs.valueless_by_exception()...})
- ? (void)0
- : throw_bad_variant_access()),
- detail::visitation::variant::visit_value(
- lib::forward<Visitor>(visitor), lib::forward<Vs>(vs)...);
- }
-#else
- namespace detail {
-
- template <std::size_t N>
- inline constexpr bool all_impl(const lib::array<bool, N> &bs,
- std::size_t idx) {
- return idx >= N || (bs[idx] && all_impl(bs, idx + 1));
- }
-
- template <std::size_t N>
- inline constexpr bool all(const lib::array<bool, N> &bs) {
- return all_impl(bs, 0);
- }
-
- } // namespace detail
-
- template <typename Visitor, typename... Vs>
- inline constexpr DECLTYPE_AUTO visit(Visitor &&visitor, Vs &&... vs)
- DECLTYPE_AUTO_RETURN(
- (detail::all(
- lib::array<bool, sizeof...(Vs)>{{!vs.valueless_by_exception()...}})
- ? (void)0
- : throw_bad_variant_access()),
- detail::visitation::variant::visit_value(lib::forward<Visitor>(visitor),
- lib::forward<Vs>(vs)...))
-#endif
-
- template <typename... Ts>
- inline auto swap(variant<Ts...> &lhs,
- variant<Ts...> &rhs) noexcept(noexcept(lhs.swap(rhs)))
- -> decltype(lhs.swap(rhs)) {
- lhs.swap(rhs);
- }
-
- namespace detail {
-
- template <typename T, typename...>
- using enabled_type = T;
-
- namespace hash {
-
- template <typename H, typename K>
- constexpr bool meets_requirements() {
- return std::is_copy_constructible<H>::value &&
- std::is_move_constructible<H>::value &&
- lib::is_invocable_r<std::size_t, H, const K &>::value;
- }
-
- template <typename K>
- constexpr bool is_enabled() {
- using H = std::hash<K>;
- return meets_requirements<H, K>() &&
- std::is_default_constructible<H>::value &&
- std::is_copy_assignable<H>::value &&
- std::is_move_assignable<H>::value;
- }
-
- } // namespace hash
-
- } // namespace detail
-
-#undef AUTO
-#undef AUTO_RETURN
-
-#undef AUTO_REFREF
-#undef AUTO_REFREF_RETURN
-
-#undef DECLTYPE_AUTO
-#undef DECLTYPE_AUTO_RETURN
-
-} // namespace mpark
-
-namespace std {
-
- template <typename... Ts>
- struct hash<mpark::detail::enabled_type<
- mpark::variant<Ts...>,
- mpark::lib::enable_if_t<mpark::lib::all<mpark::detail::hash::is_enabled<
- mpark::lib::remove_const_t<Ts>>()...>::value>>> {
- using argument_type = mpark::variant<Ts...>;
- using result_type = std::size_t;
-
- inline result_type operator()(const argument_type &v) const {
- using mpark::detail::visitation::variant;
- std::size_t result =
- v.valueless_by_exception()
- ? 299792458 // Random value chosen by the universe upon creation
- : variant::visit_alt(
-#ifdef MPARK_GENERIC_LAMBDAS
- [](const auto &alt) {
- using alt_type = mpark::lib::decay_t<decltype(alt)>;
- using value_type = mpark::lib::remove_const_t<
- typename alt_type::value_type>;
- return hash<value_type>{}(alt.value);
- }
-#else
- hasher{}
-#endif
- ,
- v);
- return hash_combine(result, hash<std::size_t>{}(v.index()));
- }
-
- private:
-#ifndef MPARK_GENERIC_LAMBDAS
- struct hasher {
- template <typename Alt>
- inline std::size_t operator()(const Alt &alt) const {
- using alt_type = mpark::lib::decay_t<Alt>;
- using value_type =
- mpark::lib::remove_const_t<typename alt_type::value_type>;
- return hash<value_type>{}(alt.value);
- }
- };
-#endif
-
- static std::size_t hash_combine(std::size_t lhs, std::size_t rhs) {
- return lhs ^= rhs + 0x9e3779b9 + (lhs << 6) + (lhs >> 2);
- }
- };
-
- template <>
- struct hash<mpark::monostate> {
- using argument_type = mpark::monostate;
- using result_type = std::size_t;
-
- inline result_type operator()(const argument_type &) const noexcept {
- return 66740831; // return a fundamentally attractive random value.
- }
- };
-
-} // namespace std
-
-#if defined(__GNUC__) && __GNUC__ >= 9
-#pragma GCC diagnostic pop
-#endif
-
-#endif // MPARK_VARIANT_HPP
diff --git a/src/libs/languageserverprotocol/clientcapabilities.cpp b/src/libs/languageserverprotocol/clientcapabilities.cpp
index 33c29df928..ce4e5ca073 100644
--- a/src/libs/languageserverprotocol/clientcapabilities.cpp
+++ b/src/libs/languageserverprotocol/clientcapabilities.cpp
@@ -47,10 +47,10 @@ WorkspaceClientCapabilities::WorkspaceClientCapabilities()
setWorkspaceFolders(true);
}
-Utils::optional<Utils::variant<bool, QJsonObject>> SemanticTokensClientCapabilities::Requests::range()
+Utils::optional<std::variant<bool, QJsonObject>> SemanticTokensClientCapabilities::Requests::range()
const
{
- using RetType = Utils::variant<bool, QJsonObject>;
+ using RetType = std::variant<bool, QJsonObject>;
const QJsonValue &rangeOptions = value(rangeKey);
if (rangeOptions.isBool())
return RetType(rangeOptions.toBool());
@@ -60,15 +60,15 @@ Utils::optional<Utils::variant<bool, QJsonObject>> SemanticTokensClientCapabilit
}
void SemanticTokensClientCapabilities::Requests::setRange(
- const Utils::variant<bool, QJsonObject> &range)
+ const std::variant<bool, QJsonObject> &range)
{
insertVariant<bool, QJsonObject>(rangeKey, range);
}
-Utils::optional<Utils::variant<bool, FullSemanticTokenOptions>>
+Utils::optional<std::variant<bool, FullSemanticTokenOptions>>
SemanticTokensClientCapabilities::Requests::full() const
{
- using RetType = Utils::variant<bool, FullSemanticTokenOptions>;
+ using RetType = std::variant<bool, FullSemanticTokenOptions>;
const QJsonValue &fullOptions = value(fullKey);
if (fullOptions.isBool())
return RetType(fullOptions.toBool());
@@ -78,7 +78,7 @@ SemanticTokensClientCapabilities::Requests::full() const
}
void SemanticTokensClientCapabilities::Requests::setFull(
- const Utils::variant<bool, FullSemanticTokenOptions> &full)
+ const std::variant<bool, FullSemanticTokenOptions> &full)
{
insertVariant<bool, FullSemanticTokenOptions>(fullKey, full);
}
diff --git a/src/libs/languageserverprotocol/clientcapabilities.h b/src/libs/languageserverprotocol/clientcapabilities.h
index 93a7181de7..7af0d12a93 100644
--- a/src/libs/languageserverprotocol/clientcapabilities.h
+++ b/src/libs/languageserverprotocol/clientcapabilities.h
@@ -78,16 +78,16 @@ public:
* The client will send the `textDocument/semanticTokens/range` request
* if the server provides a corresponding handler.
*/
- Utils::optional<Utils::variant<bool, QJsonObject>> range() const;
- void setRange(const Utils::variant<bool, QJsonObject> &range);
+ Utils::optional<std::variant<bool, QJsonObject>> range() const;
+ void setRange(const std::variant<bool, QJsonObject> &range);
void clearRange() { remove(rangeKey); }
/**
* The client will send the `textDocument/semanticTokens/full` request
* if the server provides a corresponding handler.
*/
- Utils::optional<Utils::variant<bool, FullSemanticTokenOptions>> full() const;
- void setFull(const Utils::variant<bool, FullSemanticTokenOptions> &full);
+ Utils::optional<std::variant<bool, FullSemanticTokenOptions>> full() const;
+ void setFull(const std::variant<bool, FullSemanticTokenOptions> &full);
void clearFull() { remove(fullKey); }
};
diff --git a/src/libs/languageserverprotocol/completion.h b/src/libs/languageserverprotocol/completion.h
index 1aa1f2ff53..d3630ad123 100644
--- a/src/libs/languageserverprotocol/completion.h
+++ b/src/libs/languageserverprotocol/completion.h
@@ -263,7 +263,7 @@ public:
/// The result of a completion is CompletionItem[] | CompletionList | null
class LANGUAGESERVERPROTOCOL_EXPORT CompletionResult
- : public Utils::variant<QList<CompletionItem>, CompletionList, std::nullptr_t>
+ : public std::variant<QList<CompletionItem>, CompletionList, std::nullptr_t>
{
public:
using variant::variant;
diff --git a/src/libs/languageserverprotocol/jsonobject.h b/src/libs/languageserverprotocol/jsonobject.h
index 9dd172bbef..fea9309483 100644
--- a/src/libs/languageserverprotocol/jsonobject.h
+++ b/src/libs/languageserverprotocol/jsonobject.h
@@ -112,7 +112,7 @@ private:
template<typename T, typename V>
JsonObject::iterator JsonObject::insertVariant(const QStringView key, const V &variant)
{
- return Utils::holds_alternative<T>(variant) ? insert(key, Utils::get<T>(variant)) : end();
+ return std::holds_alternative<T>(variant) ? insert(key, std::get<T>(variant)) : end();
}
template<typename T1, typename T2, typename... Args, typename V>
diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.h b/src/libs/languageserverprotocol/jsonrpcmessages.h
index 3764775eae..4e37e38db8 100644
--- a/src/libs/languageserverprotocol/jsonrpcmessages.h
+++ b/src/libs/languageserverprotocol/jsonrpcmessages.h
@@ -31,7 +31,6 @@
#include <utils/optional.h>
#include <utils/qtcassert.h>
-#include <utils/variant.h>
#include <QDebug>
#include <QElapsedTimer>
@@ -41,11 +40,13 @@
#include <QCoreApplication>
#include <QUuid>
+#include <variant>
+
namespace LanguageServerProtocol {
class JsonRpcMessage;
-class LANGUAGESERVERPROTOCOL_EXPORT MessageId : public Utils::variant<int, QString>
+class LANGUAGESERVERPROTOCOL_EXPORT MessageId : public std::variant<int, QString>
{
public:
MessageId() : variant(QString()) {}
@@ -61,37 +62,37 @@ public:
operator QJsonValue() const
{
- if (auto id = Utils::get_if<int>(this))
+ if (auto id = std::get_if<int>(this))
return *id;
- if (auto id = Utils::get_if<QString>(this))
+ if (auto id = std::get_if<QString>(this))
return *id;
return QJsonValue();
}
bool isValid() const
{
- if (Utils::holds_alternative<int>(*this))
+ if (std::holds_alternative<int>(*this))
return true;
- const QString *id = Utils::get_if<QString>(this);
+ const QString *id = std::get_if<QString>(this);
QTC_ASSERT(id, return false);
return !id->isEmpty();
}
QString toString() const
{
- if (auto id = Utils::get_if<QString>(this))
+ if (auto id = std::get_if<QString>(this))
return *id;
- if (auto id = Utils::get_if<int>(this))
+ if (auto id = std::get_if<int>(this))
return QString::number(*id);
return {};
}
friend auto qHash(const MessageId &id)
{
- if (Utils::holds_alternative<int>(id))
- return QT_PREPEND_NAMESPACE(qHash(Utils::get<int>(id)));
- if (Utils::holds_alternative<QString>(id))
- return QT_PREPEND_NAMESPACE(qHash(Utils::get<QString>(id)));
+ if (std::holds_alternative<int>(id))
+ return QT_PREPEND_NAMESPACE(qHash(std::get<int>(id)));
+ if (std::holds_alternative<QString>(id))
+ return QT_PREPEND_NAMESPACE(qHash(std::get<QString>(id)));
return QT_PREPEND_NAMESPACE(qHash(0));
}
};
@@ -99,10 +100,10 @@ public:
template <typename Error>
inline QDebug operator<<(QDebug stream, const LanguageServerProtocol::MessageId &id)
{
- if (Utils::holds_alternative<int>(id))
- stream << Utils::get<int>(id);
+ if (std::holds_alternative<int>(id))
+ stream << std::get<int>(id);
else
- stream << Utils::get<QString>(id);
+ stream << std::get<QString>(id);
return stream;
}
diff --git a/src/libs/languageserverprotocol/languagefeatures.cpp b/src/libs/languageserverprotocol/languagefeatures.cpp
index 367f22799d..630bba6d5d 100644
--- a/src/libs/languageserverprotocol/languagefeatures.cpp
+++ b/src/libs/languageserverprotocol/languagefeatures.cpp
@@ -57,11 +57,11 @@ HoverContent LanguageServerProtocol::Hover::content() const
void Hover::setContent(const HoverContent &content)
{
- if (auto val = Utils::get_if<MarkedString>(&content))
+ if (auto val = std::get_if<MarkedString>(&content))
insert(contentsKey, *val);
- else if (auto val = Utils::get_if<MarkupContent>(&content))
+ else if (auto val = std::get_if<MarkupContent>(&content))
insert(contentsKey, *val);
- else if (auto val = Utils::get_if<QList<MarkedString>>(&content))
+ else if (auto val = std::get_if<QList<MarkedString>>(&content))
insert(contentsKey, LanguageClientArray<MarkedString>(*val).toJson());
else
QTC_ASSERT_STRING("LanguageClient Using unknown type Hover::setContent");
@@ -160,7 +160,7 @@ QHash<QString, DocumentFormattingProperty> FormattingOptions::properties() const
void FormattingOptions::setProperty(const QString &key, const DocumentFormattingProperty &property)
{
- using namespace Utils;
+ using namespace std;
if (auto val = get_if<double>(&property))
insert(key, *val);
else if (auto val = get_if<QString>(&property))
@@ -293,16 +293,16 @@ MarkedString::MarkedString(const QJsonValue &value)
bool MarkedString::isValid() const
{
- if (auto markedLanguageString = Utils::get_if<MarkedLanguageString>(this))
+ if (auto markedLanguageString = std::get_if<MarkedLanguageString>(this))
return markedLanguageString->isValid();
return true;
}
LanguageServerProtocol::MarkedString::operator QJsonValue() const
{
- if (auto val = Utils::get_if<QString>(this))
+ if (auto val = std::get_if<QString>(this))
return *val;
- if (auto val = Utils::get_if<MarkedLanguageString>(this))
+ if (auto val = std::get_if<MarkedLanguageString>(this))
return QJsonValue(*val);
return {};
}
@@ -325,8 +325,8 @@ HoverContent::HoverContent(const QJsonValue &value)
bool HoverContent::isValid() const
{
- if (Utils::holds_alternative<MarkedString>(*this))
- return Utils::get<MarkedString>(*this).isValid();
+ if (std::holds_alternative<MarkedString>(*this))
+ return std::get<MarkedString>(*this).isValid();
return true;
}
@@ -346,7 +346,7 @@ SignatureHelpRequest::SignatureHelpRequest(const TextDocumentPositionParams &par
CodeActionResult::CodeActionResult(const QJsonValue &val)
{
- using ResultArray = QList<Utils::variant<Command, CodeAction>>;
+ using ResultArray = QList<std::variant<Command, CodeAction>>;
if (val.isArray()) {
const QJsonArray array = val.toArray();
ResultArray result;
@@ -368,21 +368,21 @@ CodeActionResult::CodeActionResult(const QJsonValue &val)
}
PrepareRenameResult::PrepareRenameResult()
- : Utils::variant<PlaceHolderResult, Range, std::nullptr_t>(nullptr)
+ : std::variant<PlaceHolderResult, Range, std::nullptr_t>(nullptr)
{}
PrepareRenameResult::PrepareRenameResult(
- const Utils::variant<PlaceHolderResult, Range, std::nullptr_t> &val)
- : Utils::variant<PlaceHolderResult, Range, std::nullptr_t>(val)
+ const std::variant<PlaceHolderResult, Range, std::nullptr_t> &val)
+ : std::variant<PlaceHolderResult, Range, std::nullptr_t>(val)
{}
PrepareRenameResult::PrepareRenameResult(const PlaceHolderResult &val)
- : Utils::variant<PlaceHolderResult, Range, std::nullptr_t>(val)
+ : std::variant<PlaceHolderResult, Range, std::nullptr_t>(val)
{}
PrepareRenameResult::PrepareRenameResult(const Range &val)
- : Utils::variant<PlaceHolderResult, Range, std::nullptr_t>(val)
+ : std::variant<PlaceHolderResult, Range, std::nullptr_t>(val)
{}
PrepareRenameResult::PrepareRenameResult(const QJsonValue &val)
@@ -413,7 +413,7 @@ HoverResult::HoverResult(const QJsonValue &value)
bool HoverResult::isValid() const
{
- if (auto hover = Utils::get_if<Hover>(this))
+ if (auto hover = std::get_if<Hover>(this))
return hover->isValid();
return true;
}
diff --git a/src/libs/languageserverprotocol/languagefeatures.h b/src/libs/languageserverprotocol/languagefeatures.h
index 36979692ab..e3b16a9cb5 100644
--- a/src/libs/languageserverprotocol/languagefeatures.h
+++ b/src/libs/languageserverprotocol/languagefeatures.h
@@ -58,7 +58,7 @@ public:
};
class LANGUAGESERVERPROTOCOL_EXPORT MarkedString
- : public Utils::variant<QString, MarkedLanguageString>
+ : public std::variant<QString, MarkedLanguageString>
{
public:
MarkedString() = default;
@@ -75,7 +75,7 @@ public:
};
class LANGUAGESERVERPROTOCOL_EXPORT HoverContent
- : public Utils::variant<MarkedString, QList<MarkedString>, MarkupContent>
+ : public std::variant<MarkedString, QList<MarkedString>, MarkupContent>
{
public:
HoverContent() = default;
@@ -101,7 +101,7 @@ public:
bool isValid() const override { return contains(contentsKey); }
};
-class LANGUAGESERVERPROTOCOL_EXPORT HoverResult : public Utils::variant<Hover, std::nullptr_t>
+class LANGUAGESERVERPROTOCOL_EXPORT HoverResult : public std::variant<Hover, std::nullptr_t>
{
public:
HoverResult() : variant(nullptr) {}
@@ -216,7 +216,7 @@ public:
/// The result of a goto request can either be a location, a list of locations or null
class LANGUAGESERVERPROTOCOL_EXPORT GotoResult
- : public Utils::variant<Location, QList<Location>, std::nullptr_t>
+ : public std::variant<Location, QList<Location>, std::nullptr_t>
{
public:
explicit GotoResult(const QJsonValue &value);
@@ -307,7 +307,7 @@ public:
};
class LANGUAGESERVERPROTOCOL_EXPORT DocumentHighlightsResult
- : public Utils::variant<QList<DocumentHighlight>, std::nullptr_t>
+ : public std::variant<QList<DocumentHighlight>, std::nullptr_t>
{
public:
using variant::variant;
@@ -343,7 +343,7 @@ public:
using DocumentSymbolParams = TextDocumentParams;
class LANGUAGESERVERPROTOCOL_EXPORT DocumentSymbolsResult
- : public Utils::variant<QList<SymbolInformation>, QList<DocumentSymbol>, std::nullptr_t>
+ : public std::variant<QList<SymbolInformation>, QList<DocumentSymbol>, std::nullptr_t>
{
public:
using variant::variant;
@@ -468,7 +468,7 @@ public:
};
class LANGUAGESERVERPROTOCOL_EXPORT CodeActionResult
- : public Utils::variant<QList<Utils::variant<Command, CodeAction>>, std::nullptr_t>
+ : public std::variant<QList<std::variant<Command, CodeAction>>, std::nullptr_t>
{
public:
using variant::variant;
@@ -658,13 +658,13 @@ public:
constexpr static const char methodName[] = "textDocument/colorPresentation";
};
-class DocumentFormattingProperty : public Utils::variant<bool, double, QString>
+class DocumentFormattingProperty : public std::variant<bool, double, QString>
{
public:
DocumentFormattingProperty() = default;
explicit DocumentFormattingProperty(const QJsonValue &value);
explicit DocumentFormattingProperty(const DocumentFormattingProperty &other)
- : Utils::variant<bool, double, QString>(other) {}
+ : std::variant<bool, double, QString>(other) {}
using variant::variant;
using variant::operator=;
@@ -806,11 +806,11 @@ public:
};
class LANGUAGESERVERPROTOCOL_EXPORT PrepareRenameResult
- : public Utils::variant<PlaceHolderResult, Range, std::nullptr_t>
+ : public std::variant<PlaceHolderResult, Range, std::nullptr_t>
{
public:
PrepareRenameResult();
- PrepareRenameResult(const Utils::variant<PlaceHolderResult, Range, std::nullptr_t> &val);
+ PrepareRenameResult(const std::variant<PlaceHolderResult, Range, std::nullptr_t> &val);
explicit PrepareRenameResult(const PlaceHolderResult &val);
explicit PrepareRenameResult(const Range &val);
explicit PrepareRenameResult(const QJsonValue &val);
diff --git a/src/libs/languageserverprotocol/lsptypes.cpp b/src/libs/languageserverprotocol/lsptypes.cpp
index 196f4f4375..3afb0f22e7 100644
--- a/src/libs/languageserverprotocol/lsptypes.cpp
+++ b/src/libs/languageserverprotocol/lsptypes.cpp
@@ -95,16 +95,16 @@ WorkSpaceFolder::WorkSpaceFolder(const DocumentUri &uri, const QString &name)
setName(name);
}
-MarkupOrString::MarkupOrString(const Utils::variant<QString, MarkupContent> &val)
- : Utils::variant<QString, MarkupContent>(val)
+MarkupOrString::MarkupOrString(const std::variant<QString, MarkupContent> &val)
+ : std::variant<QString, MarkupContent>(val)
{ }
MarkupOrString::MarkupOrString(const QString &val)
- : Utils::variant<QString, MarkupContent>(val)
+ : std::variant<QString, MarkupContent>(val)
{ }
MarkupOrString::MarkupOrString(const MarkupContent &val)
- : Utils::variant<QString, MarkupContent>(val)
+ : std::variant<QString, MarkupContent>(val)
{ }
MarkupOrString::MarkupOrString(const QJsonValue &val)
@@ -120,10 +120,10 @@ MarkupOrString::MarkupOrString(const QJsonValue &val)
QJsonValue MarkupOrString::toJson() const
{
- if (Utils::holds_alternative<QString>(*this))
- return Utils::get<QString>(*this);
- if (Utils::holds_alternative<MarkupContent>(*this))
- return QJsonValue(Utils::get<MarkupContent>(*this));
+ if (std::holds_alternative<QString>(*this))
+ return std::get<QString>(*this);
+ if (std::holds_alternative<MarkupContent>(*this))
+ return QJsonValue(std::get<MarkupContent>(*this));
return {};
}
diff --git a/src/libs/languageserverprotocol/lsptypes.h b/src/libs/languageserverprotocol/lsptypes.h
index e151e4afa0..ebb37d1563 100644
--- a/src/libs/languageserverprotocol/lsptypes.h
+++ b/src/libs/languageserverprotocol/lsptypes.h
@@ -34,7 +34,6 @@
#include <utils/mimeutils.h>
#include <utils/optional.h>
#include <utils/textutils.h>
-#include <utils/variant.h>
#include <QTextCursor>
#include <QJsonObject>
@@ -42,6 +41,7 @@
#include <QList>
#include <functional>
+#include <variant>
namespace LanguageServerProtocol {
@@ -190,7 +190,7 @@ public:
void clearSeverity() { remove(severityKey); }
// The diagnostic's code, which might appear in the user interface.
- using Code = Utils::variant<int, QString>;
+ using Code = std::variant<int, QString>;
Utils::optional<Code> code() const;
void setCode(const Code &code);
void clearCode() { remove(codeKey); }
@@ -456,11 +456,11 @@ public:
{ return contains(kindKey) && contains(contentKey); }
};
-class LANGUAGESERVERPROTOCOL_EXPORT MarkupOrString : public Utils::variant<QString, MarkupContent>
+class LANGUAGESERVERPROTOCOL_EXPORT MarkupOrString : public std::variant<QString, MarkupContent>
{
public:
MarkupOrString() = default;
- explicit MarkupOrString(const Utils::variant<QString, MarkupContent> &val);
+ explicit MarkupOrString(const std::variant<QString, MarkupContent> &val);
explicit MarkupOrString(const QString &val);
explicit MarkupOrString(const MarkupContent &val);
MarkupOrString(const QJsonValue &val);
diff --git a/src/libs/languageserverprotocol/lsputils.h b/src/libs/languageserverprotocol/lsputils.h
index 47352ff6bb..4d073cddbd 100644
--- a/src/libs/languageserverprotocol/lsputils.h
+++ b/src/libs/languageserverprotocol/lsputils.h
@@ -30,12 +30,13 @@
#include <utils/algorithm.h>
#include <utils/optional.h>
#include <utils/qtcassert.h>
-#include <utils/variant.h>
#include <QJsonArray>
#include <QJsonObject>
#include <QLoggingCategory>
+#include <variant>
+
namespace LanguageServerProtocol {
LANGUAGESERVERPROTOCOL_EXPORT Q_DECLARE_LOGGING_CATEGORY(conversionLog)
@@ -73,11 +74,11 @@ template<>
LANGUAGESERVERPROTOCOL_EXPORT QJsonValue fromJsonValue<QJsonValue>(const QJsonValue &value);
template <typename T>
-class LanguageClientArray : public Utils::variant<QList<T>, std::nullptr_t>
+class LanguageClientArray : public std::variant<QList<T>, std::nullptr_t>
{
public:
- using Utils::variant<QList<T>, std::nullptr_t>::variant;
- using Utils::variant<QList<T>, std::nullptr_t>::operator=;
+ using std::variant<QList<T>, std::nullptr_t>::variant;
+ using std::variant<QList<T>, std::nullptr_t>::operator=;
LanguageClientArray() {}
@@ -99,7 +100,7 @@ public:
QJsonValue toJson() const
{
- if (const auto list = Utils::get_if<QList<T>>(this)) {
+ if (const auto list = std::get_if<QList<T>>(this)) {
QJsonArray array;
for (const T &value : *list)
array.append(QJsonValue(value));
@@ -110,20 +111,20 @@ public:
QList<T> toList() const
{
- QTC_ASSERT(Utils::holds_alternative<QList<T>>(*this), return {});
- return Utils::get<QList<T>>(*this);
+ QTC_ASSERT(std::holds_alternative<QList<T>>(*this), return {});
+ return std::get<QList<T>>(*this);
}
- bool isNull() const { return Utils::holds_alternative<std::nullptr_t>(*this); }
+ bool isNull() const { return std::holds_alternative<std::nullptr_t>(*this); }
};
template <typename T>
-class LanguageClientValue : public Utils::variant<T, std::nullptr_t>
+class LanguageClientValue : public std::variant<T, std::nullptr_t>
{
public:
- using Utils::variant<T, std::nullptr_t>::operator=;
+ using std::variant<T, std::nullptr_t>::operator=;
- LanguageClientValue() : Utils::variant<T, std::nullptr_t>(nullptr) { }
- LanguageClientValue(const T &value) : Utils::variant<T, std::nullptr_t>(value) { }
+ LanguageClientValue() : std::variant<T, std::nullptr_t>(nullptr) { }
+ LanguageClientValue(const T &value) : std::variant<T, std::nullptr_t>(value) { }
LanguageClientValue(const QJsonValue &value)
{
if (!QTC_GUARD(!value.isUndefined()) || value.isNull())
@@ -134,25 +135,25 @@ public:
operator const QJsonValue() const
{
- if (auto val = Utils::get_if<T>(this))
+ if (auto val = std::get_if<T>(this))
return QJsonValue(*val);
return QJsonValue();
}
T value(const T &defaultValue = T()) const
{
- QTC_ASSERT(Utils::holds_alternative<T>(*this), return defaultValue);
- return Utils::get<T>(*this);
+ QTC_ASSERT(std::holds_alternative<T>(*this), return defaultValue);
+ return std::get<T>(*this);
}
template<typename Type>
LanguageClientValue<Type> transform()
{
- QTC_ASSERT(!Utils::holds_alternative<T>(*this), return LanguageClientValue<Type>());
- return Type(Utils::get<T>(*this));
+ QTC_ASSERT(!std::holds_alternative<T>(*this), return LanguageClientValue<Type>());
+ return Type(std::get<T>(*this));
}
- bool isNull() const { return Utils::holds_alternative<std::nullptr_t>(*this); }
+ bool isNull() const { return std::holds_alternative<std::nullptr_t>(*this); }
};
template <typename T>
diff --git a/src/libs/languageserverprotocol/progresssupport.cpp b/src/libs/languageserverprotocol/progresssupport.cpp
index 479a48489a..5802d5169d 100644
--- a/src/libs/languageserverprotocol/progresssupport.cpp
+++ b/src/libs/languageserverprotocol/progresssupport.cpp
@@ -43,9 +43,9 @@ ProgressToken::ProgressToken(const QJsonValue &value)
ProgressToken::operator QJsonValue() const
{
- if (Utils::holds_alternative<QString>(*this))
- return QJsonValue(Utils::get<QString>(*this));
- return QJsonValue(Utils::get<int>(*this));
+ if (std::holds_alternative<QString>(*this))
+ return QJsonValue(std::get<QString>(*this));
+ return QJsonValue(std::get<int>(*this));
}
ProgressParams::ProgressType ProgressParams::value() const
diff --git a/src/libs/languageserverprotocol/progresssupport.h b/src/libs/languageserverprotocol/progresssupport.h
index 65cead4287..df480ef69a 100644
--- a/src/libs/languageserverprotocol/progresssupport.h
+++ b/src/libs/languageserverprotocol/progresssupport.h
@@ -27,13 +27,13 @@
#include "jsonrpcmessages.h"
-#include <utils/variant.h>
-
#include <QJsonValue>
+#include <variant>
+
namespace LanguageServerProtocol {
-class LANGUAGESERVERPROTOCOL_EXPORT ProgressToken : public Utils::variant<int, QString>
+class LANGUAGESERVERPROTOCOL_EXPORT ProgressToken : public std::variant<int, QString>
{
public:
using variant::variant;
@@ -124,7 +124,7 @@ public:
void setToken(const ProgressToken &token) { insert(tokenKey, token); }
using ProgressType
- = Utils::variant<WorkDoneProgressBegin, WorkDoneProgressReport, WorkDoneProgressEnd>;
+ = std::variant<WorkDoneProgressBegin, WorkDoneProgressReport, WorkDoneProgressEnd>;
ProgressType value() const;
void setValue(const ProgressType &value);
diff --git a/src/libs/languageserverprotocol/semantictokens.h b/src/libs/languageserverprotocol/semantictokens.h
index cc561ec670..1010a4582a 100644
--- a/src/libs/languageserverprotocol/semantictokens.h
+++ b/src/libs/languageserverprotocol/semantictokens.h
@@ -164,7 +164,7 @@ public:
};
class LANGUAGESERVERPROTOCOL_EXPORT SemanticTokensResult
- : public Utils::variant<SemanticTokens, std::nullptr_t>
+ : public std::variant<SemanticTokens, std::nullptr_t>
{
public:
using variant::variant;
@@ -215,7 +215,7 @@ public:
};
class LANGUAGESERVERPROTOCOL_EXPORT SemanticTokensDeltaResult
- : public Utils::variant<SemanticTokens, SemanticTokensDelta, std::nullptr_t>
+ : public std::variant<SemanticTokens, SemanticTokensDelta, std::nullptr_t>
{
public:
using variant::variant;
diff --git a/src/libs/languageserverprotocol/servercapabilities.cpp b/src/libs/languageserverprotocol/servercapabilities.cpp
index dd2b7628eb..908d4374d0 100644
--- a/src/libs/languageserverprotocol/servercapabilities.cpp
+++ b/src/libs/languageserverprotocol/servercapabilities.cpp
@@ -44,9 +44,9 @@ void ServerCapabilities::setTextDocumentSync(const ServerCapabilities::TextDocum
TextDocumentSyncKind ServerCapabilities::textDocumentSyncKindHelper()
{
if (Utils::optional<TextDocumentSync> sync = textDocumentSync()) {
- if (auto kind = Utils::get_if<int>(&*sync))
+ if (auto kind = std::get_if<int>(&*sync))
return static_cast<TextDocumentSyncKind>(*kind);
- if (auto options = Utils::get_if<TextDocumentSyncOptions>(&*sync)) {
+ if (auto options = std::get_if<TextDocumentSyncOptions>(&*sync)) {
if (const Utils::optional<int> &change = options->change())
return static_cast<TextDocumentSyncKind>(*change);
}
@@ -54,10 +54,10 @@ TextDocumentSyncKind ServerCapabilities::textDocumentSyncKindHelper()
return TextDocumentSyncKind::None;
}
-Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> ServerCapabilities::hoverProvider()
+Utils::optional<std::variant<bool, WorkDoneProgressOptions>> ServerCapabilities::hoverProvider()
const
{
- using RetType = Utils::variant<bool, WorkDoneProgressOptions>;
+ using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(hoverProviderKey);
if (provider.isBool())
return Utils::make_optional(RetType(provider.toBool()));
@@ -67,15 +67,15 @@ Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> ServerCapabilitie
}
void ServerCapabilities::setHoverProvider(
- const Utils::variant<bool, WorkDoneProgressOptions> &hoverProvider)
+ const std::variant<bool, WorkDoneProgressOptions> &hoverProvider)
{
insertVariant<bool, WorkDoneProgressOptions>(hoverProviderKey, hoverProvider);
}
-Utils::optional<Utils::variant<bool, ServerCapabilities::RegistrationOptions>>
+Utils::optional<std::variant<bool, ServerCapabilities::RegistrationOptions>>
ServerCapabilities::typeDefinitionProvider() const
{
- using RetType = Utils::variant<bool, ServerCapabilities::RegistrationOptions>;
+ using RetType = std::variant<bool, ServerCapabilities::RegistrationOptions>;
const QJsonValue &provider = value(typeDefinitionProviderKey);
if (provider.isUndefined() || !(provider.isBool() || provider.isObject()))
return Utils::nullopt;
@@ -84,16 +84,16 @@ ServerCapabilities::typeDefinitionProvider() const
}
void ServerCapabilities::setTypeDefinitionProvider(
- const Utils::variant<bool, ServerCapabilities::RegistrationOptions> &typeDefinitionProvider)
+ const std::variant<bool, ServerCapabilities::RegistrationOptions> &typeDefinitionProvider)
{
insertVariant<bool, ServerCapabilities::RegistrationOptions>(typeDefinitionProviderKey,
typeDefinitionProvider);
}
-Utils::optional<Utils::variant<bool, ServerCapabilities::RegistrationOptions>>
+Utils::optional<std::variant<bool, ServerCapabilities::RegistrationOptions>>
ServerCapabilities::implementationProvider() const
{
- using RetType = Utils::variant<bool, ServerCapabilities::RegistrationOptions>;
+ using RetType = std::variant<bool, ServerCapabilities::RegistrationOptions>;
const QJsonValue &provider = value(implementationProviderKey);
if (provider.isUndefined() || !(provider.isBool() || provider.isObject()))
return Utils::nullopt;
@@ -102,15 +102,15 @@ ServerCapabilities::implementationProvider() const
}
void ServerCapabilities::setImplementationProvider(
- const Utils::variant<bool, ServerCapabilities::RegistrationOptions> &implementationProvider)
+ const std::variant<bool, ServerCapabilities::RegistrationOptions> &implementationProvider)
{
insertVariant<bool, RegistrationOptions>(implementationProviderKey, implementationProvider);
}
-Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>>
+Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::referencesProvider() const
{
- using RetType = Utils::variant<bool, WorkDoneProgressOptions>;
+ using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(referencesProviderKey);
if (provider.isBool())
return Utils::make_optional(RetType(provider.toBool()));
@@ -120,16 +120,16 @@ ServerCapabilities::referencesProvider() const
}
void ServerCapabilities::setReferencesProvider(
- const Utils::variant<bool, WorkDoneProgressOptions> &referencesProvider)
+ const std::variant<bool, WorkDoneProgressOptions> &referencesProvider)
{
insertVariant<bool, WorkDoneProgressOptions>(referencesProviderKey,
referencesProvider);
}
-Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>>
+Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::documentHighlightProvider() const
{
- using RetType = Utils::variant<bool, WorkDoneProgressOptions>;
+ using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(documentHighlightProviderKey);
if (provider.isBool())
return Utils::make_optional(RetType(provider.toBool()));
@@ -139,16 +139,16 @@ ServerCapabilities::documentHighlightProvider() const
}
void ServerCapabilities::setDocumentHighlightProvider(
- const Utils::variant<bool, WorkDoneProgressOptions> &documentHighlightProvider)
+ const std::variant<bool, WorkDoneProgressOptions> &documentHighlightProvider)
{
insertVariant<bool, WorkDoneProgressOptions>(documentHighlightProviderKey,
documentHighlightProvider);
}
-Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>>
+Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::documentSymbolProvider() const
{
- using RetType = Utils::variant<bool, WorkDoneProgressOptions>;
+ using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(documentSymbolProviderKey);
if (provider.isBool())
return Utils::make_optional(RetType(provider.toBool()));
@@ -158,7 +158,7 @@ ServerCapabilities::documentSymbolProvider() const
}
void ServerCapabilities::setDocumentSymbolProvider(
- Utils::variant<bool, WorkDoneProgressOptions> documentSymbolProvider)
+ std::variant<bool, WorkDoneProgressOptions> documentSymbolProvider)
{
insertVariant<bool, WorkDoneProgressOptions>(documentSymbolProviderKey,
documentSymbolProvider);
@@ -175,10 +175,10 @@ void ServerCapabilities::setSemanticTokensProvider(
insert(semanticTokensProviderKey, semanticTokensProvider);
}
-Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>>
+Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::workspaceSymbolProvider() const
{
- using RetType = Utils::variant<bool, WorkDoneProgressOptions>;
+ using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(workspaceSymbolProviderKey);
if (provider.isBool())
return Utils::make_optional(RetType(provider.toBool()));
@@ -188,29 +188,29 @@ ServerCapabilities::workspaceSymbolProvider() const
}
void ServerCapabilities::setWorkspaceSymbolProvider(
- Utils::variant<bool, WorkDoneProgressOptions> workspaceSymbolProvider)
+ std::variant<bool, WorkDoneProgressOptions> workspaceSymbolProvider)
{
insertVariant<bool, WorkDoneProgressOptions>(workspaceSymbolProviderKey,
workspaceSymbolProvider);
}
-Utils::optional<Utils::variant<bool, CodeActionOptions>> ServerCapabilities::codeActionProvider() const
+Utils::optional<std::variant<bool, CodeActionOptions>> ServerCapabilities::codeActionProvider() const
{
const QJsonValue &provider = value(codeActionProviderKey);
if (provider.isBool())
- return Utils::make_optional(Utils::variant<bool, CodeActionOptions>(provider.toBool()));
+ return Utils::make_optional(std::variant<bool, CodeActionOptions>(provider.toBool()));
if (provider.isObject()) {
CodeActionOptions options(provider);
if (options.isValid())
- return Utils::make_optional(Utils::variant<bool, CodeActionOptions>(options));
+ return Utils::make_optional(std::variant<bool, CodeActionOptions>(options));
}
return Utils::nullopt;
}
-Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>>
+Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::documentFormattingProvider() const
{
- using RetType = Utils::variant<bool, WorkDoneProgressOptions>;
+ using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(documentFormattingProviderKey);
if (provider.isBool())
return Utils::make_optional(RetType(provider.toBool()));
@@ -220,16 +220,16 @@ ServerCapabilities::documentFormattingProvider() const
}
void ServerCapabilities::setDocumentFormattingProvider(
- const Utils::variant<bool, WorkDoneProgressOptions> &documentFormattingProvider)
+ const std::variant<bool, WorkDoneProgressOptions> &documentFormattingProvider)
{
insertVariant<bool, WorkDoneProgressOptions>(documentFormattingProviderKey,
documentFormattingProvider);
}
-Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>>
+Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::documentRangeFormattingProvider() const
{
- using RetType = Utils::variant<bool, WorkDoneProgressOptions>;
+ using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(documentRangeFormattingProviderKey);
if (provider.isBool())
return Utils::make_optional(RetType(provider.toBool()));
@@ -239,15 +239,15 @@ ServerCapabilities::documentRangeFormattingProvider() const
}
void ServerCapabilities::setDocumentRangeFormattingProvider(
- Utils::variant<bool, WorkDoneProgressOptions> documentRangeFormattingProvider)
+ std::variant<bool, WorkDoneProgressOptions> documentRangeFormattingProvider)
{
insertVariant<bool, WorkDoneProgressOptions>(documentRangeFormattingProviderKey,
documentRangeFormattingProvider);
}
-Utils::optional<Utils::variant<ServerCapabilities::RenameOptions, bool>> ServerCapabilities::renameProvider() const
+Utils::optional<std::variant<ServerCapabilities::RenameOptions, bool>> ServerCapabilities::renameProvider() const
{
- using RetType = Utils::variant<ServerCapabilities::RenameOptions, bool>;
+ using RetType = std::variant<ServerCapabilities::RenameOptions, bool>;
const QJsonValue &localValue = value(renameProviderKey);
if (localValue.isBool())
return RetType(localValue.toBool());
@@ -256,14 +256,14 @@ Utils::optional<Utils::variant<ServerCapabilities::RenameOptions, bool>> ServerC
return Utils::nullopt;
}
-void ServerCapabilities::setRenameProvider(Utils::variant<ServerCapabilities::RenameOptions, bool> renameProvider)
+void ServerCapabilities::setRenameProvider(std::variant<ServerCapabilities::RenameOptions, bool> renameProvider)
{
insertVariant<RenameOptions, bool>(renameProviderKey, renameProvider);
}
-Utils::optional<Utils::variant<bool, JsonObject>> ServerCapabilities::colorProvider() const
+Utils::optional<std::variant<bool, JsonObject>> ServerCapabilities::colorProvider() const
{
- using RetType = Utils::variant<bool, JsonObject>;
+ using RetType = std::variant<bool, JsonObject>;
const QJsonValue &localValue = value(colorProviderKey);
if (localValue.isBool())
return RetType(localValue.toBool());
@@ -272,15 +272,15 @@ Utils::optional<Utils::variant<bool, JsonObject>> ServerCapabilities::colorProvi
return Utils::nullopt;
}
-void ServerCapabilities::setColorProvider(Utils::variant<bool, JsonObject> colorProvider)
+void ServerCapabilities::setColorProvider(std::variant<bool, JsonObject> colorProvider)
{
insertVariant<bool, JsonObject>(renameProviderKey, colorProvider);
}
-Utils::optional<Utils::variant<QString, bool> >
+Utils::optional<std::variant<QString, bool> >
ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::changeNotifications() const
{
- using RetType = Utils::variant<QString, bool>;
+ using RetType = std::variant<QString, bool>;
const QJsonValue &change = value(changeNotificationsKey);
if (change.isUndefined())
return Utils::nullopt;
@@ -289,7 +289,7 @@ ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::c
}
void ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::setChangeNotifications(
- Utils::variant<QString, bool> changeNotifications)
+ std::variant<QString, bool> changeNotifications)
{
insertVariant<QString, bool>(changeNotificationsKey, changeNotifications);
}
@@ -315,9 +315,9 @@ bool CodeActionOptions::isValid() const
return WorkDoneProgressOptions::isValid() && contains(codeActionKindsKey);
}
-Utils::optional<Utils::variant<bool, QJsonObject>> SemanticTokensOptions::range() const
+Utils::optional<std::variant<bool, QJsonObject>> SemanticTokensOptions::range() const
{
- using RetType = Utils::variant<bool, QJsonObject>;
+ using RetType = std::variant<bool, QJsonObject>;
const QJsonValue &rangeOptions = value(rangeKey);
if (rangeOptions.isBool())
return RetType(rangeOptions.toBool());
@@ -326,15 +326,15 @@ Utils::optional<Utils::variant<bool, QJsonObject>> SemanticTokensOptions::range(
return Utils::nullopt;
}
-void SemanticTokensOptions::setRange(const Utils::variant<bool, QJsonObject> &range)
+void SemanticTokensOptions::setRange(const std::variant<bool, QJsonObject> &range)
{
insertVariant<bool, QJsonObject>(rangeKey, range);
}
-Utils::optional<Utils::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions>>
+Utils::optional<std::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions>>
SemanticTokensOptions::full() const
{
- using RetType = Utils::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions>;
+ using RetType = std::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions>;
const QJsonValue &fullOptions = value(fullKey);
if (fullOptions.isBool())
return RetType(fullOptions.toBool());
@@ -344,7 +344,7 @@ SemanticTokensOptions::full() const
}
void SemanticTokensOptions::setFull(
- const Utils::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions> &full)
+ const std::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions> &full)
{
insertVariant<bool, FullSemanticTokenOptions>(fullKey, full);
}
diff --git a/src/libs/languageserverprotocol/servercapabilities.h b/src/libs/languageserverprotocol/servercapabilities.h
index 7cc1b708fc..14c8d60e78 100644
--- a/src/libs/languageserverprotocol/servercapabilities.h
+++ b/src/libs/languageserverprotocol/servercapabilities.h
@@ -152,8 +152,8 @@ public:
void setLegend(const SemanticTokensLegend &legend) { insert(legendKey, legend); }
/// Server supports providing semantic tokens for a specific range of a document.
- Utils::optional<Utils::variant<bool, QJsonObject>> range() const;
- void setRange(const Utils::variant<bool, QJsonObject> &range);
+ Utils::optional<std::variant<bool, QJsonObject>> range() const;
+ void setRange(const std::variant<bool, QJsonObject> &range);
void clearRange() { remove(rangeKey); }
class FullSemanticTokenOptions : public JsonObject
@@ -168,8 +168,8 @@ public:
};
/// Server supports providing semantic tokens for a full document.
- Utils::optional<Utils::variant<bool, FullSemanticTokenOptions>> full() const;
- void setFull(const Utils::variant<bool, FullSemanticTokenOptions> &full);
+ Utils::optional<std::variant<bool, FullSemanticTokenOptions>> full() const;
+ void setFull(const std::variant<bool, FullSemanticTokenOptions> &full);
void clearFull() { remove(fullKey); }
bool isValid() const override { return contains(legendKey); }
@@ -265,7 +265,7 @@ public:
// Defines how text documents are synced. Is either a detailed structure defining each
// notification or for backwards compatibility the TextDocumentSyncKind number.
- using TextDocumentSync = Utils::variant<TextDocumentSyncOptions, int>;
+ using TextDocumentSync = std::variant<TextDocumentSyncOptions, int>;
Utils::optional<TextDocumentSync> textDocumentSync() const;
void setTextDocumentSync(const TextDocumentSync &textDocumentSync);
void clearTextDocumentSync() { remove(textDocumentSyncKey); }
@@ -273,8 +273,8 @@ public:
TextDocumentSyncKind textDocumentSyncKindHelper();
// The server provides hover support.
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> hoverProvider() const;
- void setHoverProvider(const Utils::variant<bool, WorkDoneProgressOptions> &hoverProvider);
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> hoverProvider() const;
+ void setHoverProvider(const std::variant<bool, WorkDoneProgressOptions> &hoverProvider);
void clearHoverProvider() { remove(hoverProviderKey); }
// The server provides completion support.
@@ -321,29 +321,29 @@ public:
};
// The server provides Goto Type Definition support.
- Utils::optional<Utils::variant<bool, RegistrationOptions>> typeDefinitionProvider() const;
- void setTypeDefinitionProvider(const Utils::variant<bool, RegistrationOptions> &typeDefinitionProvider);
+ Utils::optional<std::variant<bool, RegistrationOptions>> typeDefinitionProvider() const;
+ void setTypeDefinitionProvider(const std::variant<bool, RegistrationOptions> &typeDefinitionProvider);
void clearTypeDefinitionProvider() { remove(typeDefinitionProviderKey); }
// The server provides Goto Implementation support.
- Utils::optional<Utils::variant<bool, RegistrationOptions>> implementationProvider() const;
- void setImplementationProvider(const Utils::variant<bool, RegistrationOptions> &implementationProvider);
+ Utils::optional<std::variant<bool, RegistrationOptions>> implementationProvider() const;
+ void setImplementationProvider(const std::variant<bool, RegistrationOptions> &implementationProvider);
void clearImplementationProvider() { remove(implementationProviderKey); }
// The server provides find references support.
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> referencesProvider() const;
- void setReferencesProvider(const Utils::variant<bool, WorkDoneProgressOptions> &referencesProvider);
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> referencesProvider() const;
+ void setReferencesProvider(const std::variant<bool, WorkDoneProgressOptions> &referencesProvider);
void clearReferencesProvider() { remove(referencesProviderKey); }
// The server provides document highlight support.
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> documentHighlightProvider() const;
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentHighlightProvider() const;
void setDocumentHighlightProvider(
- const Utils::variant<bool, WorkDoneProgressOptions> &documentHighlightProvider);
+ const std::variant<bool, WorkDoneProgressOptions> &documentHighlightProvider);
void clearDocumentHighlightProvider() { remove(documentHighlightProviderKey); }
// The server provides document symbol support.
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> documentSymbolProvider() const;
- void setDocumentSymbolProvider(Utils::variant<bool, WorkDoneProgressOptions> documentSymbolProvider);
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentSymbolProvider() const;
+ void setDocumentSymbolProvider(std::variant<bool, WorkDoneProgressOptions> documentSymbolProvider);
void clearDocumentSymbolProvider() { remove(documentSymbolProviderKey); }
Utils::optional<SemanticTokensOptions> semanticTokensProvider() const;
@@ -351,12 +351,12 @@ public:
void clearSemanticTokensProvider() { remove(semanticTokensProviderKey); }
// The server provides workspace symbol support.
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> workspaceSymbolProvider() const;
- void setWorkspaceSymbolProvider(Utils::variant<bool, WorkDoneProgressOptions> workspaceSymbolProvider);
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> workspaceSymbolProvider() const;
+ void setWorkspaceSymbolProvider(std::variant<bool, WorkDoneProgressOptions> workspaceSymbolProvider);
void clearWorkspaceSymbolProvider() { remove(workspaceSymbolProviderKey); }
// The server provides code actions.
- Utils::optional<Utils::variant<bool, CodeActionOptions>> codeActionProvider() const;
+ Utils::optional<std::variant<bool, CodeActionOptions>> codeActionProvider() const;
void setCodeActionProvider(bool codeActionProvider)
{ insert(codeActionProviderKey, codeActionProvider); }
void setCodeActionProvider(CodeActionOptions options)
@@ -371,14 +371,14 @@ public:
void clearCodeLensProvider() { remove(codeLensProviderKey); }
// The server provides document formatting.
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> documentFormattingProvider() const;
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentFormattingProvider() const;
void setDocumentFormattingProvider(
- const Utils::variant<bool, WorkDoneProgressOptions> &documentFormattingProvider);
+ const std::variant<bool, WorkDoneProgressOptions> &documentFormattingProvider);
void clearDocumentFormattingProvider() { remove(documentFormattingProviderKey); }
// The server provides document formatting on typing.
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> documentRangeFormattingProvider() const;
- void setDocumentRangeFormattingProvider(Utils::variant<bool, WorkDoneProgressOptions> documentRangeFormattingProvider);
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentRangeFormattingProvider() const;
+ void setDocumentRangeFormattingProvider(std::variant<bool, WorkDoneProgressOptions> documentRangeFormattingProvider);
void clearDocumentRangeFormattingProvider() { remove(documentRangeFormattingProviderKey); }
class LANGUAGESERVERPROTOCOL_EXPORT RenameOptions : public WorkDoneProgressOptions
@@ -393,8 +393,8 @@ public:
};
// The server provides rename support.
- Utils::optional<Utils::variant<RenameOptions, bool>> renameProvider() const;
- void setRenameProvider(Utils::variant<RenameOptions,bool> renameProvider);
+ Utils::optional<std::variant<RenameOptions, bool>> renameProvider() const;
+ void setRenameProvider(std::variant<RenameOptions,bool> renameProvider);
void clearRenameProvider() { remove(renameProviderKey); }
// The server provides document link support.
@@ -405,8 +405,8 @@ public:
void clearDocumentLinkProvider() { remove(documentLinkProviderKey); }
// The server provides color provider support.
- Utils::optional<Utils::variant<bool, JsonObject>> colorProvider() const;
- void setColorProvider(Utils::variant<bool, JsonObject> colorProvider);
+ Utils::optional<std::variant<bool, JsonObject>> colorProvider() const;
+ void setColorProvider(std::variant<bool, JsonObject> colorProvider);
void clearColorProvider() { remove(colorProviderKey); }
// The server provides execute command support.
@@ -431,8 +431,8 @@ public:
void setSupported(bool supported) { insert(supportedKey, supported); }
void clearSupported() { remove(supportedKey); }
- Utils::optional<Utils::variant<QString, bool>> changeNotifications() const;
- void setChangeNotifications(Utils::variant<QString, bool> changeNotifications);
+ Utils::optional<std::variant<QString, bool>> changeNotifications() const;
+ void setChangeNotifications(std::variant<QString, bool> changeNotifications);
void clearChangeNotifications() { remove(changeNotificationsKey); }
};
diff --git a/src/libs/languageserverprotocol/workspace.cpp b/src/libs/languageserverprotocol/workspace.cpp
index 3244a96bbf..c26b08f428 100644
--- a/src/libs/languageserverprotocol/workspace.cpp
+++ b/src/libs/languageserverprotocol/workspace.cpp
@@ -86,10 +86,10 @@ ExecuteCommandParams::ExecuteCommandParams(const Command &command)
LanguageServerProtocol::WorkSpaceFolderResult::operator const QJsonValue() const
{
- if (!Utils::holds_alternative<QList<WorkSpaceFolder>>(*this))
+ if (!std::holds_alternative<QList<WorkSpaceFolder>>(*this))
return QJsonValue::Null;
QJsonArray array;
- for (const auto &folder : Utils::get<QList<WorkSpaceFolder>>(*this))
+ for (const auto &folder : std::get<QList<WorkSpaceFolder>>(*this))
array.append(QJsonValue(folder));
return array;
}
diff --git a/src/libs/languageserverprotocol/workspace.h b/src/libs/languageserverprotocol/workspace.h
index 6179cd7000..bc3c3bcb0a 100644
--- a/src/libs/languageserverprotocol/workspace.h
+++ b/src/libs/languageserverprotocol/workspace.h
@@ -30,7 +30,7 @@
namespace LanguageServerProtocol {
class LANGUAGESERVERPROTOCOL_EXPORT WorkSpaceFolderResult
- : public Utils::variant<QList<WorkSpaceFolder>, std::nullptr_t>
+ : public std::variant<QList<WorkSpaceFolder>, std::nullptr_t>
{
public:
using variant::variant;
diff --git a/src/libs/nanotrace/nanotrace.cpp b/src/libs/nanotrace/nanotrace.cpp
index d6e6ca30a3..36c7fd7459 100644
--- a/src/libs/nanotrace/nanotrace.cpp
+++ b/src/libs/nanotrace/nanotrace.cpp
@@ -60,7 +60,7 @@ struct ConvertArgValueToString {
std::string Arg::value() const
{
- return Utils::visit(ConvertArgValueToString(), m_value);
+ return std::visit(ConvertArgValueToString(), m_value);
}
diff --git a/src/libs/nanotrace/nanotrace.h b/src/libs/nanotrace/nanotrace.h
index e71e6e8c19..017678e613 100644
--- a/src/libs/nanotrace/nanotrace.h
+++ b/src/libs/nanotrace/nanotrace.h
@@ -33,13 +33,11 @@
# define NANOTRACESHARED_EXPORT Q_DECL_IMPORT
#endif
-#include <utils/variant.h> // revert when macos minimum target is >= 10.14
-
#include <chrono>
#include <string>
+#include <variant>
#include <vector>
-
#ifdef NANOTRACE_ENABLED
#define NANOTRACE_INIT(process, thread, filepath) Nanotrace::init(process, thread, filepath)
@@ -81,7 +79,7 @@ using TimePoint = std::chrono::time_point< Clock >;
class NANOTRACESHARED_EXPORT Arg
{
public:
- using SupportedType = Utils::variant<int, int64_t, double, std::string>;
+ using SupportedType = std::variant<int, int64_t, double, std::string>;
Arg(const std::string &name, const SupportedType &val);
std::string name() const;
diff --git a/src/libs/sqlite/constraints.h b/src/libs/sqlite/constraints.h
index c8e1ecf7d7..700dd0ecb3 100644
--- a/src/libs/sqlite/constraints.h
+++ b/src/libs/sqlite/constraints.h
@@ -29,7 +29,8 @@
#include <sqlitevalue.h>
#include <utils/smallstring.h>
-#include <utils/variant.h>
+
+#include <variant>
namespace Sqlite {
@@ -179,7 +180,7 @@ public:
GeneratedAlwaysStorage storage = {};
};
-using Constraint = Utils::variant<Unique,
+using Constraint = std::variant<Unique,
PrimaryKey,
ForeignKey,
NotNull,
diff --git a/src/libs/sqlite/createtablesqlstatementbuilder.h b/src/libs/sqlite/createtablesqlstatementbuilder.h
index 588da02d86..cf24b688b9 100644
--- a/src/libs/sqlite/createtablesqlstatementbuilder.h
+++ b/src/libs/sqlite/createtablesqlstatementbuilder.h
@@ -294,7 +294,7 @@ private:
ContraintsVisiter visiter{columnDefinitionString};
for (const Constraint &constraint : column.constraints)
- Utils::visit(visiter, constraint);
+ std::visit(visiter, constraint);
columnDefinitionStrings.push_back(std::move(columnDefinitionString));
}
@@ -303,7 +303,7 @@ private:
Utils::SmallString columnDefinitionString;
TableContraintsVisiter visiter{columnDefinitionString};
- Utils::visit(visiter, constraint);
+ std::visit(visiter, constraint);
columnDefinitionStrings.push_back(std::move(columnDefinitionString));
}
diff --git a/src/libs/sqlite/sqlitetable.h b/src/libs/sqlite/sqlitetable.h
index 2df39f4342..6e7d09f019 100644
--- a/src/libs/sqlite/sqlitetable.h
+++ b/src/libs/sqlite/sqlitetable.h
@@ -201,8 +201,8 @@ public:
return std::find_if(constraints.begin(),
constraints.end(),
[](const Constraint &constraint) {
- return Utils::holds_alternative<Unique>(constraint)
- || Utils::holds_alternative<PrimaryKey>(constraint);
+ return std::holds_alternative<Unique>(constraint)
+ || std::holds_alternative<PrimaryKey>(constraint);
})
!= constraints.end();
}
diff --git a/src/libs/sqlite/sqlitevalue.h b/src/libs/sqlite/sqlitevalue.h
index 2ad97d7613..d4a461c34f 100644
--- a/src/libs/sqlite/sqlitevalue.h
+++ b/src/libs/sqlite/sqlitevalue.h
@@ -29,11 +29,11 @@
#include "sqliteexception.h"
#include <utils/smallstring.h>
-#include <utils/variant.h>
#include <QVariant>
#include <cstddef>
+#include <variant>
namespace Sqlite {
@@ -48,7 +48,7 @@ template<typename StringType, typename BlobType>
class ValueBase
{
public:
- using VariantType = Utils::variant<NullValue, long long, double, StringType, BlobType>;
+ using VariantType = std::variant<NullValue, long long, double, StringType, BlobType>;
ValueBase() = default;
@@ -104,18 +104,18 @@ public:
bool isNull() const { return value.index() == 0; }
- long long toInteger() const { return Utils::get<int(ValueType::Integer)>(value); }
+ long long toInteger() const { return std::get<int(ValueType::Integer)>(value); }
- double toFloat() const { return Utils::get<int(ValueType::Float)>(value); }
+ double toFloat() const { return std::get<int(ValueType::Float)>(value); }
Utils::SmallStringView toStringView() const
{
- return Utils::get<int(ValueType::String)>(value);
+ return std::get<int(ValueType::String)>(value);
}
BlobView toBlobView() const
{
- const BlobType &blob = Utils::get<int(ValueType::Blob)>(value);
+ const BlobType &blob = std::get<int(ValueType::Blob)>(value);
if constexpr (std::is_same_v<BlobType, Blob>) {
return {blob.bytes};
} else {
@@ -146,7 +146,7 @@ public:
friend bool operator==(const ValueBase &first, long long second)
{
- auto maybeInteger = Utils::get_if<int(ValueType::Integer)>(&first.value);
+ auto maybeInteger = std::get_if<int(ValueType::Integer)>(&first.value);
return maybeInteger && *maybeInteger == second;
}
@@ -155,7 +155,7 @@ public:
friend bool operator==(const ValueBase &first, double second)
{
- auto maybeFloat = Utils::get_if<int(ValueType::Float)>(&first.value);
+ auto maybeFloat = std::get_if<int(ValueType::Float)>(&first.value);
return maybeFloat && *maybeFloat == second;
}
@@ -178,7 +178,7 @@ public:
friend bool operator==(const ValueBase &first, Utils::SmallStringView second)
{
- auto maybeString = Utils::get_if<int(ValueType::String)>(&first.value);
+ auto maybeString = std::get_if<int(ValueType::String)>(&first.value);
return maybeString && *maybeString == second;
}
@@ -190,7 +190,7 @@ public:
friend bool operator==(const ValueBase &first, const QString &second)
{
- auto maybeString = Utils::get_if<int(ValueType::String)>(&first.value);
+ auto maybeString = std::get_if<int(ValueType::String)>(&first.value);
return maybeString && second == QLatin1String{maybeString->data(), int(maybeString->size())};
}
@@ -219,7 +219,7 @@ public:
friend bool operator==(const ValueBase &first, BlobView second)
{
- auto maybeBlob = Utils::get_if<int(ValueType::Blob)>(&first.value);
+ auto maybeBlob = std::get_if<int(ValueType::Blob)>(&first.value);
return maybeBlob && *maybeBlob == second;
}
diff --git a/src/libs/sqlite/tableconstraints.h b/src/libs/sqlite/tableconstraints.h
index b2dee2c928..8ff6e3419d 100644
--- a/src/libs/sqlite/tableconstraints.h
+++ b/src/libs/sqlite/tableconstraints.h
@@ -29,7 +29,8 @@
#include <sqlitevalue.h>
#include <utils/smallstringvector.h>
-#include <utils/variant.h>
+
+#include <variant>
namespace Sqlite {
class TablePrimaryKey
@@ -43,7 +44,7 @@ public:
Utils::SmallStringVector columns;
};
-using TableConstraint = Utils::variant<TablePrimaryKey>;
+using TableConstraint = std::variant<TablePrimaryKey>;
using TableConstraints = std::vector<TableConstraint>;
} // namespace Sqlite
diff --git a/src/libs/utils/CMakeLists.txt b/src/libs/utils/CMakeLists.txt
index 30ed664789..fa1d361174 100644
--- a/src/libs/utils/CMakeLists.txt
+++ b/src/libs/utils/CMakeLists.txt
@@ -5,7 +5,6 @@ add_qtc_library(Utils
Qt6Core5Compat
SOURCES
../3rdparty/optional/optional.hpp
- ../3rdparty/variant/variant.hpp
../3rdparty/span/span.hpp
QtConcurrentTools
algorithm.h
@@ -182,7 +181,6 @@ add_qtc_library(Utils
utils_global.h
utilsicons.cpp utilsicons.h
variablechooser.cpp variablechooser.h
- variant.h
winutils.cpp winutils.h
wizard.cpp wizard.h
wizardpage.cpp wizardpage.h
diff --git a/src/libs/utils/fsengine/fileiconprovider.cpp b/src/libs/utils/fsengine/fileiconprovider.cpp
index 0addee5386..d292684d32 100644
--- a/src/libs/utils/fsengine/fileiconprovider.cpp
+++ b/src/libs/utils/fsengine/fileiconprovider.cpp
@@ -30,7 +30,6 @@
#include <utils/mimeutils.h>
#include <utils/optional.h>
#include <utils/qtcassert.h>
-#include <utils/variant.h>
#include <QApplication>
#include <QStyle>
@@ -43,6 +42,8 @@
#include <QIcon>
#include <QLoggingCategory>
+#include <variant>
+
using namespace Utils;
Q_LOGGING_CATEGORY(fileIconProvider, "qtc.core.fileiconprovider", QtWarningMsg)
@@ -65,7 +66,7 @@ Q_LOGGING_CATEGORY(fileIconProvider, "qtc.core.fileiconprovider", QtWarningMsg)
retrieve icons via the icon() function.
*/
-using Item = Utils::variant<QIcon, QString>; // icon or filename for the icon
+using Item = std::variant<QIcon, QString>; // icon or filename for the icon
namespace Utils {
namespace FileIconProvider {
@@ -75,10 +76,10 @@ static Utils::optional<QIcon> getIcon(QHash<QString, Item> &cache, const QString
auto it = cache.constFind(key);
if (it == cache.constEnd())
return {};
- if (const QIcon *icon = Utils::get_if<QIcon>(&*it))
+ if (const QIcon *icon = std::get_if<QIcon>(&*it))
return *icon;
// need to create icon from file name first
- const QString *fileName = Utils::get_if<QString>(&*it);
+ const QString *fileName = std::get_if<QString>(&*it);
QTC_ASSERT(fileName, return {});
const QIcon icon = QIcon(
FileIconProvider::overlayIcon(QStyle::SP_FileIcon, QIcon(*fileName), QSize(16, 16)));
diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs
index 4252ebae13..fba84763a5 100644
--- a/src/libs/utils/utils.qbs
+++ b/src/libs/utils/utils.qbs
@@ -327,8 +327,6 @@ Project {
"utilsicons.cpp",
"variablechooser.cpp",
"variablechooser.h",
- "variant.h",
- "../3rdparty/variant/variant.hpp",
"winutils.cpp",
"winutils.h",
"wizard.cpp",
diff --git a/src/libs/utils/variant.h b/src/libs/utils/variant.h
deleted file mode 100644
index 2f118e6b4c..0000000000
--- a/src/libs/utils/variant.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-/*
- See std(::experimental)::variant.
-*/
-
-// std::variant from Apple's Clang supports methods that throw std::bad_optional_access only
-// with deployment target >= macOS 10.14
-// TODO: Use std::variant everywhere when we can require macOS 10.14
-#if !defined(__apple_build_version__)
-#include <variant>
-
-namespace Utils {
-using std::get;
-using std::get_if;
-using std::holds_alternative;
-using std::monostate;
-using std::variant;
-using std::variant_alternative_t;
-using std::visit;
-} // namespace Utils
-
-#else
-#include <3rdparty/variant/variant.hpp>
-
-namespace Utils {
-using mpark::get;
-using mpark::get_if;
-using mpark::holds_alternative;
-using mpark::monostate;
-using mpark::variant;
-using mpark::variant_alternative_t;
-using mpark::visit;
-} // namespace Utils
-
-#endif
diff --git a/src/plugins/android/avdmanageroutputparser.cpp b/src/plugins/android/avdmanageroutputparser.cpp
index 4965214334..c78b83a00f 100644
--- a/src/plugins/android/avdmanageroutputparser.cpp
+++ b/src/plugins/android/avdmanageroutputparser.cpp
@@ -30,12 +30,13 @@
#include <utils/fileutils.h>
#include <utils/optional.h>
#include <utils/qtcassert.h>
-#include <utils/variant.h>
#include <QLoggingCategory>
#include <QRegularExpression>
#include <QSettings>
+#include <variant>
+
namespace {
Q_LOGGING_CATEGORY(avdOutputParserLog, "qtc.android.avdOutputParser", QtWarningMsg)
}
@@ -113,7 +114,7 @@ AndroidDeviceInfoList parseAvdList(const QString &output, QStringList *avdErrorP
AndroidDeviceInfoList avdList;
QStringList avdInfo;
using ErrorPath = QString;
- using AvdResult = Utils::variant<std::monostate, AndroidDeviceInfo, ErrorPath>;
+ using AvdResult = std::variant<std::monostate, AndroidDeviceInfo, ErrorPath>;
const auto parseAvdInfo = [](const QStringList &avdInfo) {
if (!avdInfo.filter(avdManufacturerError).isEmpty()) {
for (const QString &line : avdInfo) {
@@ -138,9 +139,9 @@ AndroidDeviceInfoList parseAvdList(const QString &output, QStringList *avdErrorP
for (const QString &line : lines) {
if (line.startsWith("---------") || line.isEmpty()) {
const AvdResult result = parseAvdInfo(avdInfo);
- if (auto info = Utils::get_if<AndroidDeviceInfo>(&result))
+ if (auto info = std::get_if<AndroidDeviceInfo>(&result))
avdList << *info;
- else if (auto errorPath = Utils::get_if<ErrorPath>(&result))
+ else if (auto errorPath = std::get_if<ErrorPath>(&result))
*avdErrorPaths << *errorPath;
avdInfo.clear();
} else {
diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp
index 2e308d66a5..b750c59f08 100644
--- a/src/plugins/clangcodemodel/clangdclient.cpp
+++ b/src/plugins/clangcodemodel/clangdclient.cpp
@@ -411,7 +411,7 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir)
connect(this, &Client::workDone, this,
[this, p = QPointer(project)](const ProgressToken &token) {
- const QString * const val = Utils::get_if<QString>(&token);
+ const QString * const val = std::get_if<QString>(&token);
if (val && *val == indexingToken()) {
d->isFullyIndexed = true;
emit indexingFinished();
@@ -511,7 +511,7 @@ void ClangdClient::handleDiagnostics(const PublishDiagnosticsParams &params)
// We know that there's only one kind of diagnostic for which clangd has
// a quickfix tweak, so let's not be wasteful.
const Diagnostic::Code code = diagnostic.code().value_or(Diagnostic::Code());
- const QString * const codeString = Utils::get_if<QString>(&code);
+ const QString * const codeString = std::get_if<QString>(&code);
if (codeString && *codeString == "-Wswitch")
requestCodeActions(uri, diagnostic);
}
@@ -577,7 +577,7 @@ class ClangdDiagnosticManager : public LanguageClient::DiagnosticManager
{
return Utils::filtered(diagnostics, [](const Diagnostic &diag){
const Diagnostic::Code code = diag.code().value_or(Diagnostic::Code());
- const QString * const codeString = Utils::get_if<QString>(&code);
+ const QString * const codeString = std::get_if<QString>(&code);
return !codeString || *codeString != "drv_unknown_argument";
});
}
@@ -809,7 +809,7 @@ MessageId ClangdClient::requestSymbolInfo(const Utils::FilePath &filePath, const
// According to the documentation, we should receive a single
// object here, but it's a list. No idea what it means if there's
// more than one entry. We choose the first one.
- const auto list = Utils::get_if<QList<SymbolDetails>>(&result.value());
+ const auto list = std::get_if<QList<SymbolDetails>>(&result.value());
if (!list || list->isEmpty()) {
handler({}, {}, reqId);
return;
@@ -922,9 +922,9 @@ void ClangdClient::gatherHelpItemForTooltip(const HoverRequest::Response &hoverR
const DocumentUri &uri)
{
if (const Utils::optional<HoverResult> result = hoverResponse.result()) {
- if (auto hover = Utils::get_if<Hover>(&(*result))) {
+ if (auto hover = std::get_if<Hover>(&(*result))) {
const HoverContent content = hover->content();
- const MarkupContent *const markup = Utils::get_if<MarkupContent>(&content);
+ const MarkupContent *const markup = std::get_if<MarkupContent>(&content);
if (markup) {
const QString markupString = markup->content();
@@ -964,7 +964,7 @@ void ClangdClient::gatherHelpItemForTooltip(const HoverRequest::Response &hoverR
const MessageId id = hoverResponse.id();
Range range;
if (const Utils::optional<HoverResult> result = hoverResponse.result()) {
- if (auto hover = Utils::get_if<Hover>(&(*result)))
+ if (auto hover = std::get_if<Hover>(&(*result)))
range = hover->range().value_or(Range());
}
const ClangdAstPath path = getAstPath(ast, range);
@@ -1340,10 +1340,10 @@ MessageId ClangdClient::Private::getAndHandleAst(const TextDocOrFile &doc,
const AstHandler &astHandler,
AstCallbackMode callbackMode, const Range &range)
{
- const auto textDocPtr = Utils::get_if<const TextDocument *>(&doc);
+ const auto textDocPtr = std::get_if<const TextDocument *>(&doc);
const TextDocument * const textDoc = textDocPtr ? *textDocPtr : nullptr;
const Utils::FilePath filePath = textDoc ? textDoc->filePath()
- : Utils::get<Utils::FilePath>(doc);
+ : std::get<Utils::FilePath>(doc);
// If the entire AST is requested and the document's AST is in the cache and it is up to date,
// call the handler.
diff --git a/src/plugins/clangcodemodel/clangdclient.h b/src/plugins/clangcodemodel/clangdclient.h
index 9c7ec12e03..7476ceff05 100644
--- a/src/plugins/clangcodemodel/clangdclient.h
+++ b/src/plugins/clangcodemodel/clangdclient.h
@@ -110,7 +110,7 @@ public:
Utils::optional<bool> hasVirtualFunctionAt(TextEditor::TextDocument *doc, int revision,
const LanguageServerProtocol::Range &range);
- using TextDocOrFile = Utils::variant<const TextEditor::TextDocument *, Utils::FilePath>;
+ using TextDocOrFile = std::variant<const TextEditor::TextDocument *, Utils::FilePath>;
using AstHandler = std::function<void(const ClangdAstNode &ast,
const LanguageServerProtocol::MessageId &)>;
enum class AstCallbackMode { SyncIfPossible, AlwaysAsync };
diff --git a/src/plugins/clangcodemodel/clangdcompletion.cpp b/src/plugins/clangcodemodel/clangdcompletion.cpp
index e37cf293de..af48d3d6e3 100644
--- a/src/plugins/clangcodemodel/clangdcompletion.cpp
+++ b/src/plugins/clangcodemodel/clangdcompletion.cpp
@@ -362,10 +362,10 @@ ClangdCompletionItem::SpecialQtType ClangdCompletionItem::getQtType(const Comple
if (!doc)
return SpecialQtType::None;
QString docText;
- if (Utils::holds_alternative<QString>(*doc))
- docText = Utils::get<QString>(*doc);
- else if (Utils::holds_alternative<MarkupContent>(*doc))
- docText = Utils::get<MarkupContent>(*doc).content();
+ if (std::holds_alternative<QString>(*doc))
+ docText = std::get<QString>(*doc);
+ else if (std::holds_alternative<MarkupContent>(*doc))
+ docText = std::get<MarkupContent>(*doc).content();
if (docText.contains("Annotation: qt_signal"))
return SpecialQtType::Signal;
if (docText.contains("Annotation: qt_slot"))
diff --git a/src/plugins/clangcodemodel/clangdfollowsymbol.cpp b/src/plugins/clangcodemodel/clangdfollowsymbol.cpp
index a0e6aae610..0ff6ac1f7a 100644
--- a/src/plugins/clangcodemodel/clangdfollowsymbol.cpp
+++ b/src/plugins/clangcodemodel/clangdfollowsymbol.cpp
@@ -399,9 +399,9 @@ void ClangdFollowSymbol::Private::handleGotoImplementationResult(
{
if (const optional<GotoResult> &result = response.result()) {
QList<Link> newLinks;
- if (const auto ploc = get_if<Location>(&*result))
+ if (const auto ploc = std::get_if<Location>(&*result))
newLinks = {ploc->toLink()};
- if (const auto plloc = get_if<QList<Location>>(&*result))
+ if (const auto plloc = std::get_if<QList<Location>>(&*result))
newLinks = transform(*plloc, &Location::toLink);
for (const Link &link : qAsConst(newLinks)) {
if (!allLinks.contains(link)) {
@@ -475,9 +475,9 @@ void ClangdFollowSymbol::Private::handleGotoImplementationResult(
Link newLink;
if (optional<GotoResult> _result = response.result()) {
const GotoResult result = _result.value();
- if (const auto ploc = get_if<Location>(&result)) {
+ if (const auto ploc = std::get_if<Location>(&result)) {
newLink = ploc->toLink();
- } else if (const auto plloc = get_if<QList<Location>>(&result)) {
+ } else if (const auto plloc = std::get_if<QList<Location>>(&result)) {
if (!plloc->isEmpty())
newLink = plloc->value(0).toLink();
}
diff --git a/src/plugins/clangcodemodel/clangdquickfixes.cpp b/src/plugins/clangcodemodel/clangdquickfixes.cpp
index b0dfded775..c56e37e956 100644
--- a/src/plugins/clangcodemodel/clangdquickfixes.cpp
+++ b/src/plugins/clangcodemodel/clangdquickfixes.cpp
@@ -85,20 +85,20 @@ private:
TextEditor::GenericProposal *handleCodeActionResult(const CodeActionResult &result) override
{
auto toOperation =
- [=](const Utils::variant<Command, CodeAction> &item) -> QuickFixOperation * {
- if (auto action = Utils::get_if<CodeAction>(&item)) {
+ [=](const std::variant<Command, CodeAction> &item) -> QuickFixOperation * {
+ if (auto action = std::get_if<CodeAction>(&item)) {
const Utils::optional<QList<Diagnostic>> diagnostics = action->diagnostics();
if (!diagnostics.has_value() || diagnostics->isEmpty())
return new CodeActionQuickFixOperation(*action, client());
}
- if (auto command = Utils::get_if<Command>(&item))
+ if (auto command = std::get_if<Command>(&item))
return new CommandQuickFixOperation(*command, client());
return nullptr;
};
- if (auto list = Utils::get_if<QList<Utils::variant<Command, CodeAction>>>(&result)) {
+ if (auto list = std::get_if<QList<std::variant<Command, CodeAction>>>(&result)) {
QuickFixOperations ops;
- for (const Utils::variant<Command, CodeAction> &item : *list) {
+ for (const std::variant<Command, CodeAction> &item : *list) {
if (QuickFixOperation *op = toOperation(item)) {
op->setDescription("clangd: " + op->description());
ops << op;
diff --git a/src/plugins/clangcodemodel/clangdswitchdecldef.cpp b/src/plugins/clangcodemodel/clangdswitchdecldef.cpp
index 28c27034f4..125714bdb1 100644
--- a/src/plugins/clangcodemodel/clangdswitchdecldef.cpp
+++ b/src/plugins/clangcodemodel/clangdswitchdecldef.cpp
@@ -152,7 +152,7 @@ QTextCursor ClangdSwitchDeclDef::Private::cursorForFunctionName(const ClangdAstN
{
QTC_ASSERT(docSymbols, return {});
- const auto symbolList = Utils::get_if<QList<DocumentSymbol>>(&*docSymbols);
+ const auto symbolList = std::get_if<QList<DocumentSymbol>>(&*docSymbols);
if (!symbolList)
return {};
const Range &astRange = functionNode.range();
diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp
index 4fb31804fe..ce206f672c 100644
--- a/src/plugins/clangcodemodel/clangtextmark.cpp
+++ b/src/plugins/clangcodemodel/clangtextmark.cpp
@@ -233,7 +233,7 @@ ClangDiagnostic convertDiagnostic(const ClangdDiagnostic &src, const FilePath &f
if (src.severity())
target.severity = convertSeverity(*src.severity());
const Diagnostic::Code code = src.code().value_or(Diagnostic::Code());
- const QString * const codeString = Utils::get_if<QString>(&code);
+ const QString * const codeString = std::get_if<QString>(&code);
if (codeString && codeString->startsWith("-W"))
target.enableOption = *codeString;
for (const CodeAction &codeAction : src.codeActions().value_or(QList<CodeAction>())) {
diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp
index df9dc9ea5b..084e203f41 100644
--- a/src/plugins/clangcodemodel/test/clangdtests.cpp
+++ b/src/plugins/clangcodemodel/test/clangdtests.cpp
@@ -1464,7 +1464,7 @@ public:
void insertCodeSnippet(int pos, const QString &text, const SnippetParser &parser) override
{
const auto parseResult = parser(text);
- if (const auto snippet = Utils::get_if<ParsedSnippet>(&parseResult)) {
+ if (const auto snippet = std::get_if<ParsedSnippet>(&parseResult)) {
if (!snippet->parts.isEmpty())
textCursorAt(pos).insertText(snippet->parts.first().text);
}
diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp
index c7c3f4a0dd..7a642dc5ef 100644
--- a/src/plugins/clangtools/clangtool.cpp
+++ b/src/plugins/clangtools/clangtool.cpp
@@ -680,8 +680,8 @@ void ClangTool::startTool(ClangTool::FileSelection fileSelection,
connect(m_runControl, &RunControl::stopped, this, &ClangTool::onRunControlStopped);
// Run worker
- const bool preventBuild = holds_alternative<FilePath>(fileSelection)
- || get<FileSelectionType>(fileSelection)
+ const bool preventBuild = std::holds_alternative<FilePath>(fileSelection)
+ || std::get<FileSelectionType>(fileSelection)
== FileSelectionType::CurrentFile;
const bool buildBeforeAnalysis = !preventBuild && runSettings.buildBeforeAnalysis();
m_runWorker = new ClangToolRunWorker(m_runControl,
@@ -730,7 +730,7 @@ Diagnostics ClangTool::read(OutputFileFormat outputFileFormat,
FileInfos ClangTool::collectFileInfos(Project *project, FileSelection fileSelection)
{
- FileSelectionType *selectionType = get_if<FileSelectionType>(&fileSelection);
+ FileSelectionType *selectionType = std::get_if<FileSelectionType>(&fileSelection);
// early bailout
if (selectionType && *selectionType == FileSelectionType::CurrentFile
&& !EditorManager::currentDocument()) {
@@ -759,8 +759,8 @@ FileInfos ClangTool::collectFileInfos(Project *project, FileSelection fileSelect
return dialog.fileInfos();
}
- const FilePath filePath = holds_alternative<FilePath>(fileSelection)
- ? get<FilePath>(fileSelection)
+ const FilePath filePath = std::holds_alternative<FilePath>(fileSelection)
+ ? std::get<FilePath>(fileSelection)
: EditorManager::currentDocument()->filePath(); // see early bailout
if (!filePath.isEmpty()) {
const FileInfo fileInfo = Utils::findOrDefault(allFileInfos, [&](const FileInfo &fi) {
diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h
index d0f993b1a0..59f78354fa 100644
--- a/src/plugins/clangtools/clangtool.h
+++ b/src/plugins/clangtools/clangtool.h
@@ -35,7 +35,7 @@
#include <projectexplorer/runconfiguration.h>
#include <cppeditor/projectinfo.h>
-#include <utils/variant.h>
+#include <variant>
QT_BEGIN_NAMESPACE
class QFrame;
@@ -87,7 +87,7 @@ public:
AskUser,
};
- using FileSelection = Utils::variant<FileSelectionType, Utils::FilePath>;
+ using FileSelection = std::variant<FileSelectionType, Utils::FilePath>;
void startTool(FileSelection fileSelection);
void startTool(FileSelection fileSelection,
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp
index d4c79d833e..425eee223b 100644
--- a/src/plugins/languageclient/client.cpp
+++ b/src/plugins/languageclient/client.cpp
@@ -623,7 +623,7 @@ void Client::openDocument(TextEditor::TextDocument *document)
}
} else if (Utils::optional<ServerCapabilities::TextDocumentSync> _sync
= d->m_serverCapabilities.textDocumentSync()) {
- if (auto options = Utils::get_if<TextDocumentSyncOptions>(&*_sync)) {
+ if (auto options = std::get_if<TextDocumentSyncOptions>(&*_sync)) {
if (!options->openClose().value_or(true))
return;
}
@@ -791,11 +791,11 @@ void ClientPrivate::requestDocumentHighlightsNow(TextEditor::TextEditorWidget *w
if (!option.filterApplies(widget->textDocument()->filePath()))
return;
} else {
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> provider
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> provider
= m_serverCapabilities.documentHighlightProvider();
if (!provider.has_value())
return;
- if (Utils::holds_alternative<bool>(*provider) && !Utils::get<bool>(*provider))
+ if (std::holds_alternative<bool>(*provider) && !std::get<bool>(*provider))
return;
}
@@ -819,7 +819,7 @@ void ClientPrivate::requestDocumentHighlightsNow(TextEditor::TextEditorWidget *w
const Id &id = TextEditor::TextEditorWidget::CodeSemanticsSelection;
QList<QTextEdit::ExtraSelection> selections;
const Utils::optional<DocumentHighlightsResult> &result = response.result();
- if (!result.has_value() || holds_alternative<std::nullptr_t>(*result)) {
+ if (!result.has_value() || std::holds_alternative<std::nullptr_t>(*result)) {
widget->setExtraSelections(id, selections);
return;
}
@@ -827,7 +827,7 @@ void ClientPrivate::requestDocumentHighlightsNow(TextEditor::TextEditorWidget *w
const QTextCharFormat &format =
widget->textDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES);
QTextDocument *document = widget->document();
- for (const auto &highlight : get<QList<DocumentHighlight>>(*result)) {
+ for (const auto &highlight : std::get<QList<DocumentHighlight>>(*result)) {
QTextEdit::ExtraSelection selection{widget->textCursor(), format};
const int &start = highlight.range().start().toPositionInDocument(document);
const int &end = highlight.range().end().toPositionInDocument(document);
@@ -1013,7 +1013,7 @@ void Client::documentContentsSaved(TextEditor::TextDocument *document)
}
} else if (Utils::optional<ServerCapabilities::TextDocumentSync> _sync
= d->m_serverCapabilities.textDocumentSync()) {
- if (auto options = Utils::get_if<TextDocumentSyncOptions>(&*_sync)) {
+ if (auto options = std::get_if<TextDocumentSyncOptions>(&*_sync)) {
if (Utils::optional<SaveOptions> saveOptions = options->save())
includeText = saveOptions->includeText().value_or(includeText);
}
@@ -1047,7 +1047,7 @@ void Client::documentWillSave(Core::IDocument *document)
}
} else if (Utils::optional<ServerCapabilities::TextDocumentSync> _sync
= d->m_serverCapabilities.textDocumentSync()) {
- if (auto options = Utils::get_if<TextDocumentSyncOptions>(&*_sync))
+ if (auto options = std::get_if<TextDocumentSyncOptions>(&*_sync))
send = options->willSave().value_or(send);
}
if (!send)
@@ -1285,9 +1285,9 @@ void Client::requestCodeActions(const CodeActionRequest &request)
if (option.isValid() && !option.filterApplies(fileName))
return;
} else {
- Utils::variant<bool, CodeActionOptions> provider
+ std::variant<bool, CodeActionOptions> provider
= d->m_serverCapabilities.codeActionProvider().value_or(false);
- if (!(Utils::holds_alternative<CodeActionOptions>(provider) || Utils::get<bool>(provider)))
+ if (!(std::holds_alternative<CodeActionOptions>(provider) || std::get<bool>(provider)))
return;
}
@@ -1300,12 +1300,12 @@ void Client::handleCodeActionResponse(const CodeActionRequest::Response &respons
if (const Utils::optional<CodeActionRequest::Response::Error> &error = response.error())
log(*error);
if (const Utils::optional<CodeActionResult> &result = response.result()) {
- if (auto list = Utils::get_if<QList<Utils::variant<Command, CodeAction>>>(&*result)) {
+ if (auto list = std::get_if<QList<std::variant<Command, CodeAction>>>(&*result)) {
QList<CodeAction> codeActions;
- for (const Utils::variant<Command, CodeAction> &item : *list) {
- if (auto action = Utils::get_if<CodeAction>(&item))
+ for (const std::variant<Command, CodeAction> &item : *list) {
+ if (auto action = std::get_if<CodeAction>(&item))
codeActions << *action;
- else if (auto command = Utils::get_if<Command>(&item))
+ else if (auto command = std::get_if<Command>(&item))
Q_UNUSED(command) // todo
}
updateCodeActionRefactoringMarker(this, codeActions, uri);
@@ -1506,12 +1506,12 @@ bool Client::supportsDocumentSymbols(const TextEditor::TextDocument *doc) const
return !options.isValid()
|| options.filterApplies(doc->filePath(), Utils::mimeTypeForName(doc->mimeType()));
}
- const Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> &provider
+ const Utils::optional<std::variant<bool, WorkDoneProgressOptions>> &provider
= capabilities().documentSymbolProvider();
if (!provider.has_value())
return false;
- if (Utils::holds_alternative<bool>(*provider))
- return Utils::get<bool>(*provider);
+ if (std::holds_alternative<bool>(*provider))
+ return std::get<bool>(*provider);
return true;
}
@@ -1998,11 +1998,11 @@ void ClientPrivate::initializeCallback(const InitializeRequest::Response &initRe
qCDebug(LOGLSPCLIENT) << "language server " << m_displayName << " initialized";
m_state = Client::Initialized;
q->sendMessage(InitializeNotification(InitializedParams()));
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> documentSymbolProvider
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentSymbolProvider
= q->capabilities().documentSymbolProvider();
if (documentSymbolProvider.has_value()) {
- if (!Utils::holds_alternative<bool>(*documentSymbolProvider)
- || Utils::get<bool>(*documentSymbolProvider)) {
+ if (!std::holds_alternative<bool>(*documentSymbolProvider)
+ || std::get<bool>(*documentSymbolProvider)) {
TextEditor::IOutlineWidgetFactory::updateOutline();
}
}
@@ -2044,8 +2044,9 @@ bool ClientPrivate::sendWorkspceFolderChanges() const
if (folder->supported().value_or(false)) {
// holds either the Id for deregistration or whether it is registered
auto notification = folder->changeNotifications().value_or(false);
- return holds_alternative<QString>(notification)
- || (holds_alternative<bool>(notification) && get<bool>(notification));
+ return std::holds_alternative<QString>(notification)
+ || (std::holds_alternative<bool>(notification)
+ && std::get<bool>(notification));
}
}
}
diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp
index 8066e9b752..0d6bd81ca2 100644
--- a/src/plugins/languageclient/languageclientcompletionassist.cpp
+++ b/src/plugins/languageclient/languageclientcompletionassist.cpp
@@ -144,11 +144,11 @@ QString LanguageClientCompletionItem::detail() const
if (auto _doc = m_item.documentation()) {
auto doc = *_doc;
QString detailDocText;
- if (Utils::holds_alternative<QString>(doc)) {
- detailDocText = Utils::get<QString>(doc);
- } else if (Utils::holds_alternative<MarkupContent>(doc)) {
+ if (std::holds_alternative<QString>(doc)) {
+ detailDocText = std::get<QString>(doc);
+ } else if (std::holds_alternative<MarkupContent>(doc)) {
// TODO markdown parser?
- detailDocText = Utils::get<MarkupContent>(doc).content();
+ detailDocText = std::get<MarkupContent>(doc).content();
}
if (!detailDocText.isEmpty())
return detailDocText;
@@ -425,18 +425,18 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse(
m_client->log(*error);
const Utils::optional<CompletionResult> &result = response.result();
- if (!result || Utils::holds_alternative<std::nullptr_t>(*result)) {
+ if (!result || std::holds_alternative<std::nullptr_t>(*result)) {
setAsyncProposalAvailable(nullptr);
m_client->removeAssistProcessor(this);
return;
}
QList<CompletionItem> items;
- if (Utils::holds_alternative<CompletionList>(*result)) {
- const auto &list = Utils::get<CompletionList>(*result);
+ if (std::holds_alternative<CompletionList>(*result)) {
+ const auto &list = std::get<CompletionList>(*result);
items = list.items().value_or(QList<CompletionItem>());
- } else if (Utils::holds_alternative<QList<CompletionItem>>(*result)) {
- items = Utils::get<QList<CompletionItem>>(*result);
+ } else if (std::holds_alternative<QList<CompletionItem>>(*result)) {
+ items = std::get<QList<CompletionItem>>(*result);
}
auto proposalItems = generateCompletionItems(items);
if (!m_snippetsGroup.isEmpty()) {
diff --git a/src/plugins/languageclient/languageclientformatter.cpp b/src/plugins/languageclient/languageclientformatter.cpp
index f1cea20b93..f6b811f917 100644
--- a/src/plugins/languageclient/languageclientformatter.cpp
+++ b/src/plugins/languageclient/languageclientformatter.cpp
@@ -86,11 +86,11 @@ QFutureWatcher<ChangeSet> *LanguageClientFormatter::format(
return nullptr;
}
} else {
- const Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> &provider
+ const Utils::optional<std::variant<bool, WorkDoneProgressOptions>> &provider
= m_client->capabilities().documentRangeFormattingProvider();
if (!provider.has_value())
return nullptr;
- if (Utils::holds_alternative<bool>(*provider) && !Utils::get<bool>(*provider))
+ if (std::holds_alternative<bool>(*provider) && !std::get<bool>(*provider))
return nullptr;
}
DocumentRangeFormattingParams params;
diff --git a/src/plugins/languageclient/languageclienthoverhandler.cpp b/src/plugins/languageclient/languageclienthoverhandler.cpp
index 32db0e5319..e37c0a38aa 100644
--- a/src/plugins/languageclient/languageclienthoverhandler.cpp
+++ b/src/plugins/languageclient/languageclienthoverhandler.cpp
@@ -66,7 +66,7 @@ void HoverHandler::setHelpItem(const LanguageServerProtocol::MessageId &msgId,
{
if (msgId == m_response.id()) {
if (Utils::optional<HoverResult> result = m_response.result()) {
- if (auto hover = Utils::get_if<Hover>(&(*result)))
+ if (auto hover = std::get_if<Hover>(&(*result)))
setContent(hover->content());
}
m_response = {};
@@ -107,11 +107,11 @@ void HoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget,
if (m_preferDiagnostics && reportDiagnostics(cursor))
return;
- const Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> &provider
+ const Utils::optional<std::variant<bool, WorkDoneProgressOptions>> &provider
= m_client->capabilities().hoverProvider();
bool sendMessage = provider.has_value();
- if (sendMessage && Utils::holds_alternative<bool>(*provider))
- sendMessage = Utils::get<bool>(*provider);
+ if (sendMessage && std::holds_alternative<bool>(*provider))
+ sendMessage = std::get<bool>(*provider);
if (Utils::optional<bool> registered = m_client->dynamicCapabilities().isRegistered(
HoverRequest::methodName)) {
sendMessage = *registered;
@@ -146,7 +146,7 @@ void HoverHandler::handleResponse(const HoverRequest::Response &response, const
m_client->log(*error);
}
if (Utils::optional<HoverResult> result = response.result()) {
- if (auto hover = Utils::get_if<Hover>(&(*result))) {
+ if (auto hover = std::get_if<Hover>(&(*result))) {
if (m_helpItemProvider) {
m_response = response;
m_helpItemProvider(response, m_uri);
@@ -166,9 +166,9 @@ static QString toolTipForMarkedStrings(const QList<MarkedString> &markedStrings)
for (const MarkedString &markedString : markedStrings) {
if (!tooltip.isEmpty())
tooltip += '\n';
- if (auto string = Utils::get_if<QString>(&markedString))
+ if (auto string = std::get_if<QString>(&markedString))
tooltip += *string;
- else if (auto string = Utils::get_if<MarkedLanguageString>(&markedString))
+ else if (auto string = std::get_if<MarkedLanguageString>(&markedString))
tooltip += string->value() + " [" + string->language() + ']';
}
return tooltip;
@@ -176,11 +176,11 @@ static QString toolTipForMarkedStrings(const QList<MarkedString> &markedStrings)
void HoverHandler::setContent(const HoverContent &hoverContent)
{
- if (auto markupContent = Utils::get_if<MarkupContent>(&hoverContent))
+ if (auto markupContent = std::get_if<MarkupContent>(&hoverContent))
setToolTip(markupContent->content(), markupContent->textFormat());
- else if (auto markedString = Utils::get_if<MarkedString>(&hoverContent))
+ else if (auto markedString = std::get_if<MarkedString>(&hoverContent))
setToolTip(toolTipForMarkedStrings({*markedString}));
- else if (auto markedStrings = Utils::get_if<QList<MarkedString>>(&hoverContent))
+ else if (auto markedStrings = std::get_if<QList<MarkedString>>(&hoverContent))
setToolTip(toolTipForMarkedStrings(*markedStrings));
}
diff --git a/src/plugins/languageclient/languageclientoutline.cpp b/src/plugins/languageclient/languageclientoutline.cpp
index 6928edeccf..2a7d97f197 100644
--- a/src/plugins/languageclient/languageclientoutline.cpp
+++ b/src/plugins/languageclient/languageclientoutline.cpp
@@ -296,10 +296,10 @@ void LanguageClientOutlineWidget::handleResponse(const DocumentUri &uri,
{
if (uri != m_uri)
return;
- if (Utils::holds_alternative<QList<SymbolInformation>>(result))
- m_model.setInfo(Utils::get<QList<SymbolInformation>>(result));
- else if (Utils::holds_alternative<QList<DocumentSymbol>>(result))
- m_model.setInfo(Utils::get<QList<DocumentSymbol>>(result));
+ if (std::holds_alternative<QList<SymbolInformation>>(result))
+ m_model.setInfo(std::get<QList<SymbolInformation>>(result));
+ else if (std::holds_alternative<QList<DocumentSymbol>>(result))
+ m_model.setInfo(std::get<QList<DocumentSymbol>>(result));
else
m_model.clear();
@@ -440,10 +440,10 @@ void OutlineComboBox::updateModel(const DocumentUri &resultUri, const DocumentSy
{
if (m_uri != resultUri)
return;
- if (Utils::holds_alternative<QList<SymbolInformation>>(result))
- m_model.setInfo(Utils::get<QList<SymbolInformation>>(result));
- else if (Utils::holds_alternative<QList<DocumentSymbol>>(result))
- m_model.setInfo(Utils::get<QList<DocumentSymbol>>(result));
+ if (std::holds_alternative<QList<SymbolInformation>>(result))
+ m_model.setInfo(std::get<QList<SymbolInformation>>(result));
+ else if (std::holds_alternative<QList<DocumentSymbol>>(result))
+ m_model.setInfo(std::get<QList<DocumentSymbol>>(result));
else
m_model.clear();
diff --git a/src/plugins/languageclient/languageclientquickfix.cpp b/src/plugins/languageclient/languageclientquickfix.cpp
index e65ba296b1..4a3c2d3d6b 100644
--- a/src/plugins/languageclient/languageclientquickfix.cpp
+++ b/src/plugins/languageclient/languageclientquickfix.cpp
@@ -124,12 +124,12 @@ void LanguageClientQuickFixAssistProcessor::handleCodeActionResponse(const CodeA
GenericProposal *LanguageClientQuickFixAssistProcessor::handleCodeActionResult(const CodeActionResult &result)
{
- if (auto list = Utils::get_if<QList<Utils::variant<Command, CodeAction>>>(&result)) {
+ if (auto list = std::get_if<QList<std::variant<Command, CodeAction>>>(&result)) {
QuickFixOperations ops;
- for (const Utils::variant<Command, CodeAction> &item : *list) {
- if (auto action = Utils::get_if<CodeAction>(&item))
+ for (const std::variant<Command, CodeAction> &item : *list) {
+ if (auto action = std::get_if<CodeAction>(&item))
ops << new CodeActionQuickFixOperation(*action, m_client);
- else if (auto command = Utils::get_if<Command>(&item))
+ else if (auto command = std::get_if<Command>(&item))
ops << new CommandQuickFixOperation(*command, m_client);
}
return GenericProposal::createProposal(m_assistInterface.data(), ops);
diff --git a/src/plugins/languageclient/languageclientsymbolsupport.cpp b/src/plugins/languageclient/languageclientsymbolsupport.cpp
index 7e6dcdb6b2..7be82fb433 100644
--- a/src/plugins/languageclient/languageclientsymbolsupport.cpp
+++ b/src/plugins/languageclient/languageclientsymbolsupport.cpp
@@ -64,11 +64,11 @@ static void sendTextDocumentPositionParamsRequest(Client *client,
else
sendMessage = supportedFile;
} else {
- const Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> &provider
+ const Utils::optional<std::variant<bool, WorkDoneProgressOptions>> &provider
= serverCapability.referencesProvider();
sendMessage = provider.has_value();
- if (sendMessage && Utils::holds_alternative<bool>(*provider))
- sendMessage = Utils::get<bool>(*provider);
+ if (sendMessage && std::holds_alternative<bool>(*provider))
+ sendMessage = std::get<bool>(*provider);
}
if (sendMessage)
client->sendMessage(request);
@@ -79,11 +79,11 @@ static void handleGotoDefinitionResponse(const GotoDefinitionRequest::Response &
Utils::optional<Utils::Link> linkUnderCursor)
{
if (Utils::optional<GotoResult> result = response.result()) {
- if (Utils::holds_alternative<std::nullptr_t>(*result)) {
+ if (std::holds_alternative<std::nullptr_t>(*result)) {
callback({});
- } else if (auto ploc = Utils::get_if<Location>(&*result)) {
+ } else if (auto ploc = std::get_if<Location>(&*result)) {
callback(linkUnderCursor.value_or(ploc->toLink()));
- } else if (auto plloc = Utils::get_if<QList<Location>>(&*result)) {
+ } else if (auto plloc = std::get_if<QList<Location>>(&*result)) {
if (!plloc->isEmpty())
callback(linkUnderCursor.value_or(plloc->value(0).toLink()));
else
@@ -260,11 +260,11 @@ static bool supportsRename(Client *client,
}
}
if (auto renameProvider = client->capabilities().renameProvider()) {
- if (Utils::holds_alternative<bool>(*renameProvider)) {
- if (!Utils::get<bool>(*renameProvider))
+ if (std::holds_alternative<bool>(*renameProvider)) {
+ if (!std::get<bool>(*renameProvider))
return false;
- } else if (Utils::holds_alternative<ServerCapabilities::RenameOptions>(*renameProvider)) {
- prepareSupported = Utils::get<ServerCapabilities::RenameOptions>(*renameProvider)
+ } else if (std::holds_alternative<ServerCapabilities::RenameOptions>(*renameProvider)) {
+ prepareSupported = std::get<ServerCapabilities::RenameOptions>(*renameProvider)
.prepareProvider()
.value_or(false);
}
@@ -306,11 +306,11 @@ void SymbolSupport::requestPrepareRename(const TextDocumentPositionParams &param
const Utils::optional<PrepareRenameResult> &result = response.result();
if (result.has_value()) {
- if (Utils::holds_alternative<PlaceHolderResult>(*result)) {
- auto placeHolderResult = Utils::get<PlaceHolderResult>(*result);
+ if (std::holds_alternative<PlaceHolderResult>(*result)) {
+ auto placeHolderResult = std::get<PlaceHolderResult>(*result);
startRenameSymbol(params, placeHolderResult.placeHolder());
- } else if (Utils::holds_alternative<Range>(*result)) {
- auto range = Utils::get<Range>(*result);
+ } else if (std::holds_alternative<Range>(*result)) {
+ auto range = std::get<Range>(*result);
startRenameSymbol(params, placeholder);
}
}
diff --git a/src/plugins/languageclient/locatorfilter.cpp b/src/plugins/languageclient/locatorfilter.cpp
index 6dd843900d..fdde560674 100644
--- a/src/plugins/languageclient/locatorfilter.cpp
+++ b/src/plugins/languageclient/locatorfilter.cpp
@@ -211,9 +211,9 @@ QList<Core::LocatorFilterEntry> DocumentLocatorFilter::matchesFor(
QTC_ASSERT(m_currentSymbols.has_value(), return {});
- if (auto list = Utils::get_if<QList<DocumentSymbol>>(&*m_currentSymbols))
+ if (auto list = std::get_if<QList<DocumentSymbol>>(&*m_currentSymbols))
return generateEntries(*list, entry);
- else if (auto list = Utils::get_if<QList<SymbolInformation>>(&*m_currentSymbols))
+ else if (auto list = std::get_if<QList<SymbolInformation>>(&*m_currentSymbols))
return generateEntries(*list, entry);
return {};
@@ -277,11 +277,11 @@ void WorkspaceLocatorFilter::prepareSearch(const QString &entry,
continue;
if (!(force || client->locatorsEnabled()))
continue;
- Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> capability
+ Utils::optional<std::variant<bool, WorkDoneProgressOptions>> capability
= client->capabilities().workspaceSymbolProvider();
if (!capability.has_value())
continue;
- if (Utils::holds_alternative<bool>(*capability) && !Utils::get<bool>(*capability))
+ if (std::holds_alternative<bool>(*capability) && !std::get<bool>(*capability))
continue;
WorkspaceSymbolRequest request(params);
request.setResponseCallback(
diff --git a/src/plugins/languageclient/progressmanager.cpp b/src/plugins/languageclient/progressmanager.cpp
index d25da8a3e0..4fe459bcec 100644
--- a/src/plugins/languageclient/progressmanager.cpp
+++ b/src/plugins/languageclient/progressmanager.cpp
@@ -45,11 +45,11 @@ void ProgressManager::handleProgress(const LanguageServerProtocol::ProgressParam
{
const ProgressToken &token = params.token();
ProgressParams::ProgressType value = params.value();
- if (auto begin = Utils::get_if<WorkDoneProgressBegin>(&value))
+ if (auto begin = std::get_if<WorkDoneProgressBegin>(&value))
beginProgress(token, *begin);
- else if (auto report = Utils::get_if<WorkDoneProgressReport>(&value))
+ else if (auto report = std::get_if<WorkDoneProgressReport>(&value))
reportProgress(token, *report);
- else if (auto end = Utils::get_if<WorkDoneProgressEnd>(&value))
+ else if (auto end = std::get_if<WorkDoneProgressEnd>(&value))
endProgress(token, *end);
}
@@ -68,16 +68,16 @@ void ProgressManager::reset()
bool ProgressManager::isProgressEndMessage(const LanguageServerProtocol::ProgressParams &params)
{
- return Utils::holds_alternative<WorkDoneProgressEnd>(params.value());
+ return std::holds_alternative<WorkDoneProgressEnd>(params.value());
}
Utils::Id languageClientProgressId(const ProgressToken &token)
{
constexpr char k_LanguageClientProgressId[] = "LanguageClient.ProgressId.";
auto toString = [](const ProgressToken &token){
- if (Utils::holds_alternative<int>(token))
- return QString::number(Utils::get<int>(token));
- return Utils::get<QString>(token);
+ if (std::holds_alternative<int>(token))
+ return QString::number(std::get<int>(token));
+ return std::get<QString>(token);
};
return Utils::Id(k_LanguageClientProgressId).withSuffix(toString(token));
}
diff --git a/src/plugins/languageclient/semantichighlightsupport.cpp b/src/plugins/languageclient/semantichighlightsupport.cpp
index 7fbf664591..4f01699321 100644
--- a/src/plugins/languageclient/semantichighlightsupport.cpp
+++ b/src/plugins/languageclient/semantichighlightsupport.cpp
@@ -356,7 +356,7 @@ void SemanticTokenSupport::handleSemanticTokens(const Utils::FilePath &filePath,
const SemanticTokensResult &result,
int documentVersion)
{
- if (auto tokens = Utils::get_if<SemanticTokens>(&result)) {
+ if (auto tokens = std::get_if<SemanticTokens>(&result)) {
const bool force = !m_tokens.contains(filePath);
m_tokens[filePath] = {*tokens, documentVersion};
highlight(filePath, force);
@@ -369,10 +369,10 @@ void SemanticTokenSupport::handleSemanticTokensDelta(
int documentVersion)
{
qCDebug(LOGLSPHIGHLIGHT) << "Handle Tokens for " << filePath;
- if (auto tokens = Utils::get_if<SemanticTokens>(&result)) {
+ if (auto tokens = std::get_if<SemanticTokens>(&result)) {
m_tokens[filePath] = {*tokens, documentVersion};
qCDebug(LOGLSPHIGHLIGHT) << "New Data " << tokens->data();
- } else if (auto tokensDelta = Utils::get_if<SemanticTokensDelta>(&result)) {
+ } else if (auto tokensDelta = std::get_if<SemanticTokensDelta>(&result)) {
m_tokens[filePath].version = documentVersion;
QList<SemanticTokensEdit> edits = tokensDelta->edits();
if (edits.isEmpty()) {
diff --git a/src/plugins/languageclient/snippet.cpp b/src/plugins/languageclient/snippet.cpp
index 1270a9cc0b..284f565941 100644
--- a/src/plugins/languageclient/snippet.cpp
+++ b/src/plugins/languageclient/snippet.cpp
@@ -263,11 +263,11 @@ void LanguageClient::LanguageClientPlugin::testSnippetParsing()
QFETCH(Parts, parts);
SnippetParseResult result = LanguageClient::parseSnippet(input);
- QCOMPARE(Utils::holds_alternative<ParsedSnippet>(result), success);
+ QCOMPARE(std::holds_alternative<ParsedSnippet>(result), success);
if (!success)
return;
- ParsedSnippet snippet = Utils::get<ParsedSnippet>(result);
+ ParsedSnippet snippet = std::get<ParsedSnippet>(result);
auto rangesCompare = [&](const ParsedSnippet::Part &actual, const SnippetPart &expected) {
QCOMPARE(actual.text, expected.text);
diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp
index 6df432d19d..01686539ea 100644
--- a/src/plugins/projectexplorer/projectnodes.cpp
+++ b/src/plugins/projectexplorer/projectnodes.cpp
@@ -470,18 +470,18 @@ QIcon FolderNode::icon() const
QTC_CHECK(QThread::currentThread() == QCoreApplication::instance()->thread());
// Instantiating the Icon provider is expensive.
- if (auto strPtr = Utils::get_if<QString>(&m_icon)) {
+ if (auto strPtr = std::get_if<QString>(&m_icon)) {
m_icon = QIcon(*strPtr);
- } else if (auto directoryIconPtr = Utils::get_if<DirectoryIcon>(&m_icon)) {
+ } else if (auto directoryIconPtr = std::get_if<DirectoryIcon>(&m_icon)) {
m_icon = directoryIconPtr->icon();
- } else if (auto creatorPtr = Utils::get_if<IconCreator>(&m_icon)) {
+ } else if (auto creatorPtr = std::get_if<IconCreator>(&m_icon)) {
m_icon = (*creatorPtr)();
} else {
- auto iconPtr = Utils::get_if<QIcon>(&m_icon);
+ auto iconPtr = std::get_if<QIcon>(&m_icon);
if (!iconPtr || iconPtr->isNull())
m_icon = Utils::FileIconProvider::icon(QFileIconProvider::Folder);
}
- return Utils::get<QIcon>(m_icon);
+ return std::get<QIcon>(m_icon);
}
Node *FolderNode::findNode(const std::function<bool(Node *)> &filter)
diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h
index 9e2e4e9474..e0fa420b9b 100644
--- a/src/plugins/projectexplorer/projectnodes.h
+++ b/src/plugins/projectexplorer/projectnodes.h
@@ -34,9 +34,9 @@
#include <utils/fileutils.h>
#include <utils/id.h>
#include <utils/optional.h>
-#include <utils/variant.h>
#include <functional>
+#include <variant>
namespace Utils { class MimeType; }
@@ -354,7 +354,7 @@ private:
QString m_displayName;
QString m_addFileFilter;
- mutable Utils::variant<QIcon, DirectoryIcon, QString, IconCreator> m_icon;
+ mutable std::variant<QIcon, DirectoryIcon, QString, IconCreator> m_icon;
bool m_showWhenEmpty = false;
};
diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp
index d7f2505895..a62613b5c0 100644
--- a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp
+++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp
@@ -108,7 +108,7 @@ void ImageCacheCollector::start(Utils::SmallStringView name,
}
if (is3DRoot) {
- if (auto libIcon = Utils::get_if<ImageCache::LibraryIconAuxiliaryData>(&auxiliaryData))
+ if (auto libIcon = std::get_if<ImageCache::LibraryIconAuxiliaryData>(&auxiliaryData))
rewriterView.rootModelNode().setAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite,
"isLibraryIcon",
libIcon->enable);
diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp b/src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp
index 3069600fd0..b59aa5b4bf 100644
--- a/src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp
+++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp
@@ -128,7 +128,7 @@ void ImageCacheFontCollector::start(Utils::SmallStringView name,
{
QFont font;
if (resolveFont(QString(name), font) >= 0) {
- auto &&auxiliaryData = Utils::get<ImageCache::FontCollectorSizeAuxiliaryData>(auxiliaryDataValue);
+ auto &&auxiliaryData = std::get<ImageCache::FontCollectorSizeAuxiliaryData>(auxiliaryDataValue);
QColor textColor = auxiliaryData.colorName;
QSize size = auxiliaryData.size;
QString text = font.family() + "\n" + auxiliaryData.text;
@@ -150,7 +150,7 @@ std::pair<QImage, QImage> ImageCacheFontCollector::createImage(
{
QFont font;
if (resolveFont(QString(name), font) >= 0) {
- auto &&auxiliaryData = Utils::get<ImageCache::FontCollectorSizeAuxiliaryData>(auxiliaryDataValue);
+ auto &&auxiliaryData = std::get<ImageCache::FontCollectorSizeAuxiliaryData>(auxiliaryDataValue);
QColor textColor = auxiliaryData.colorName;
QSize size = auxiliaryData.size;
QString text = font.family() + "\n\n" + auxiliaryData.text;
@@ -172,7 +172,7 @@ QIcon ImageCacheFontCollector::createIcon(Utils::SmallStringView name,
QFont font;
if (resolveFont(QString(name), font) >= 0) {
- auto &&auxiliaryData = Utils::get<ImageCache::FontCollectorSizesAuxiliaryData>(auxiliaryDataValue);
+ auto &&auxiliaryData = std::get<ImageCache::FontCollectorSizesAuxiliaryData>(auxiliaryDataValue);
QColor textColor = auxiliaryData.colorName;
const auto sizes = auxiliaryData.sizes;
QString text = auxiliaryData.text;
diff --git a/src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h b/src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h
index c7193960ed..18788ea350 100644
--- a/src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h
+++ b/src/plugins/qmldesigner/designercore/include/auxiliarydataproperties.h
@@ -26,20 +26,20 @@
#pragma once
#include <auxiliarydata.h>
-#include <utils/variant.h>
#include <QColor>
#include <QVariant>
#include <type_traits>
+#include <variant>
namespace QmlDesigner {
-using PropertyValue = Utils::variant<int, long long, double, bool, QColor, QStringView, Qt::Corner>;
+using PropertyValue = std::variant<int, long long, double, bool, QColor, QStringView, Qt::Corner>;
inline QVariant toQVariant(const PropertyValue &variant)
{
- return Utils::visit([](const auto &value) { return QVariant::fromValue(value); }, variant);
+ return std::visit([](const auto &value) { return QVariant::fromValue(value); }, variant);
}
class AuxiliaryDataKeyDefaultValue : public AuxiliaryDataKeyView
diff --git a/src/plugins/qmldesigner/designercore/include/imagecacheauxiliarydata.h b/src/plugins/qmldesigner/designercore/include/imagecacheauxiliarydata.h
index 61660271fc..153b61e9ee 100644
--- a/src/plugins/qmldesigner/designercore/include/imagecacheauxiliarydata.h
+++ b/src/plugins/qmldesigner/designercore/include/imagecacheauxiliarydata.h
@@ -26,13 +26,13 @@
#pragma once
#include <utils/span.h>
-#include <utils/variant.h>
#include <QImage>
#include <QSize>
#include <QString>
#include <functional>
+#include <variant>
namespace QmlDesigner {
@@ -60,10 +60,10 @@ public:
bool enable;
};
-using AuxiliaryData = Utils::variant<Utils::monostate,
- LibraryIconAuxiliaryData,
- FontCollectorSizeAuxiliaryData,
- FontCollectorSizesAuxiliaryData>;
+using AuxiliaryData = std::variant<std::monostate,
+ LibraryIconAuxiliaryData,
+ FontCollectorSizeAuxiliaryData,
+ FontCollectorSizesAuxiliaryData>;
enum class AbortReason : char { Abort, Failed };
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
index 1b2770d197..21a0e7e883 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
@@ -1910,7 +1910,7 @@ private:
if (type.changeLevel == Storage::Synchronization::ChangeLevel::Minimal)
return;
- if (Utils::visit([](auto &&typeName) -> bool { return typeName.name.isEmpty(); },
+ if (std::visit([](auto &&typeName) -> bool { return typeName.name.isEmpty(); },
type.prototype)) {
updatePrototypeStatement.write(type.typeId, Sqlite::NullValue{}, Sqlite::NullValue{});
} else {
@@ -1981,7 +1981,7 @@ private:
SourceId sourceId;
};
- return Utils::visit(Inspect{*this, sourceId}, name);
+ return std::visit(Inspect{*this, sourceId}, name);
}
template<typename Id>
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h
index 25be97f1eb..c4781d41ad 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h
@@ -29,9 +29,9 @@
#include "projectstorageids.h"
#include <utils/smallstring.h>
-#include <utils/variant.h>
#include <tuple>
+#include <variant>
#include <vector>
namespace QmlDesigner {
@@ -425,7 +425,7 @@ public:
ExportedTypeNameId exportedTypeNameId;
};
-using ImportedTypeName = Utils::variant<ImportedType, QualifiedImportedType>;
+using ImportedTypeName = std::variant<ImportedType, QualifiedImportedType>;
class EnumeratorDeclaration
{
diff --git a/src/plugins/texteditor/snippets/snippet.cpp b/src/plugins/texteditor/snippets/snippet.cpp
index 885b008026..6dec2efe5e 100644
--- a/src/plugins/texteditor/snippets/snippet.cpp
+++ b/src/plugins/texteditor/snippets/snippet.cpp
@@ -182,10 +182,10 @@ QString Snippet::generateTip() const
{
SnippetParseResult result = Snippet::parse(m_content);
- if (Utils::holds_alternative<SnippetParseError>(result))
- return Utils::get<SnippetParseError>(result).htmlMessage();
- QTC_ASSERT(Utils::holds_alternative<ParsedSnippet>(result), return {});
- const ParsedSnippet parsedSnippet = Utils::get<ParsedSnippet>(result);
+ if (std::holds_alternative<SnippetParseError>(result))
+ return std::get<SnippetParseError>(result).htmlMessage();
+ QTC_ASSERT(std::holds_alternative<ParsedSnippet>(result), return {});
+ const ParsedSnippet parsedSnippet = std::get<ParsedSnippet>(result);
QString tip("<nobr>");
for (const ParsedSnippet::Part &part : parsedSnippet.parts)
@@ -407,11 +407,11 @@ void Internal::TextEditorPlugin::testSnippetParsing()
QFETCH(Parts, parts);
SnippetParseResult result = Snippet::parse(input);
- QCOMPARE(Utils::holds_alternative<ParsedSnippet>(result), success);
+ QCOMPARE(std::holds_alternative<ParsedSnippet>(result), success);
if (!success)
return;
- ParsedSnippet snippet = Utils::get<ParsedSnippet>(result);
+ ParsedSnippet snippet = std::get<ParsedSnippet>(result);
auto rangesCompare = [&](const ParsedSnippet::Part &actual, const SnippetPart &expected) {
QCOMPARE(actual.text, expected.text);
diff --git a/src/plugins/texteditor/snippets/snippetparser.h b/src/plugins/texteditor/snippets/snippetparser.h
index 67d0560d02..887cdf6936 100644
--- a/src/plugins/texteditor/snippets/snippetparser.h
+++ b/src/plugins/texteditor/snippets/snippetparser.h
@@ -28,7 +28,8 @@
#include <texteditor/texteditor_global.h>
#include <utils/id.h>
-#include <utils/variant.h>
+
+#include <variant>
namespace TextEditor {
@@ -67,7 +68,7 @@ public:
QString htmlMessage() const;
};
-using SnippetParseResult = Utils::variant<ParsedSnippet, SnippetParseError>;
+using SnippetParseResult = std::variant<ParsedSnippet, SnippetParseError>;
using SnippetParser = std::function<SnippetParseResult (const QString &)>;
} // namespace TextEditor
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 969be964bf..4ed97382b7 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -2761,13 +2761,13 @@ void TextEditorWidget::insertCodeSnippet(const QTextCursor &cursor_arg,
const SnippetParser &parse)
{
SnippetParseResult result = parse(snippet);
- if (Utils::holds_alternative<SnippetParseError>(result)) {
- const auto &error = Utils::get<SnippetParseError>(result);
+ if (std::holds_alternative<SnippetParseError>(result)) {
+ const auto &error = std::get<SnippetParseError>(result);
QMessageBox::warning(this, tr("Snippet Parse Error"), error.htmlMessage());
return;
}
- QTC_ASSERT(Utils::holds_alternative<ParsedSnippet>(result), return);
- ParsedSnippet data = Utils::get<ParsedSnippet>(result);
+ QTC_ASSERT(std::holds_alternative<ParsedSnippet>(result), return);
+ ParsedSnippet data = std::get<ParsedSnippet>(result);
QTextCursor cursor = cursor_arg;
cursor.beginEditBlock();
diff --git a/tests/unit/unittest/asynchronousimagefactory-test.cpp b/tests/unit/unittest/asynchronousimagefactory-test.cpp
index cc23374a57..f307c38327 100644
--- a/tests/unit/unittest/asynchronousimagefactory-test.cpp
+++ b/tests/unit/unittest/asynchronousimagefactory-test.cpp
@@ -62,7 +62,7 @@ TEST_F(AsynchronousImageFactory, RequestImageRequestImageFromCollector)
EXPECT_CALL(collectorMock,
start(Eq("/path/to/Component.qml"),
IsEmpty(),
- VariantWith<Utils::monostate>(Utils::monostate{}),
+ VariantWith<std::monostate>(std::monostate{}),
_,
_))
.WillRepeatedly([&](auto, auto, auto, auto, auto) { notification.notify(); });
@@ -76,7 +76,7 @@ TEST_F(AsynchronousImageFactory, RequestImageWithExtraIdRequestImageFromCollecto
EXPECT_CALL(collectorMock,
start(Eq("/path/to/Component.qml"),
Eq("foo"),
- VariantWith<Utils::monostate>(Utils::monostate{}),
+ VariantWith<std::monostate>(std::monostate{}),
_,
_))
.WillRepeatedly([&](auto, auto, auto, auto, auto) { notification.notify(); });
@@ -162,7 +162,7 @@ TEST_F(AsynchronousImageFactory, AfterCleanNewJobsWorks)
EXPECT_CALL(collectorMock,
start(Eq("/path/to/Component.qml"),
IsEmpty(),
- VariantWith<Utils::monostate>(Utils::monostate{}),
+ VariantWith<std::monostate>(std::monostate{}),
_,
_))
.WillRepeatedly([&](auto, auto, auto, auto, auto) { notification.notify(); });
@@ -181,7 +181,7 @@ TEST_F(AsynchronousImageFactory, CaptureImageCallbackStoresImage)
ON_CALL(collectorMock,
start(Eq("/path/to/Component.qml"),
Eq("id"),
- VariantWith<Utils::monostate>(Utils::monostate{}),
+ VariantWith<std::monostate>(std::monostate{}),
_,
_))
.WillByDefault([&](auto, auto, auto, auto capture, auto) { capture(image1, smallImage1); });
diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp
index 93b19f39ea..2c6046740a 100644
--- a/tests/unit/unittest/gtest-creator-printing.cpp
+++ b/tests/unit/unittest/gtest-creator-printing.cpp
@@ -33,6 +33,7 @@
#include <clangtools/clangtoolsdiagnostic.h>
#include <debugger/analyzer/diagnosticlocation.h>
+#include <imagecacheauxiliarydata.h>
#include <modelnode.h>
#include <projectstorage/filestatus.h>
#include <projectstorage/projectstoragepathwatchertypes.h>
@@ -54,6 +55,12 @@ template <typename T> ostream &operator<<(ostream &out, const QVector<T> &vector
out << "]";
return out;
}
+
+std::ostream &operator<<(std::ostream &out, const monostate &)
+{
+ return out << "monostate";
+}
+
} // namespace std
namespace Utils {
@@ -739,6 +746,7 @@ std::ostream &operator<<(std::ostream &out, const QualifiedImportedType &importe
std::ostream &operator<<(std::ostream &out, const Type &type)
{
+ using std::operator<<;
using Utils::operator<<;
return out << "( typename: \"" << type.typeName << "\", prototype: " << type.prototype << ", "
<< type.prototypeId << ", " << type.traits << ", source: " << type.sourceId
@@ -813,4 +821,20 @@ std::ostream &operator<<(std::ostream &out, const ModuleExportedImport &import)
} // namespace Storage::Synchronization
+namespace ImageCache {
+
+std::ostream &operator<<(std::ostream &out, const LibraryIconAuxiliaryData &data)
+{
+ return out << "(" << data.enable << ")";
+}
+std::ostream &operator<<(std::ostream &out, const FontCollectorSizeAuxiliaryData &data)
+{
+ return out << "(" << data.text << ", " << data.size << ", " << data.colorName << ")";
+}
+std::ostream &operator<<(std::ostream &out, const FontCollectorSizesAuxiliaryData &data)
+{
+ return out << "(" << data.text << ", " << data.colorName << ")";
+}
+} // namespace ImageCache
+
} // namespace QmlDesigner
diff --git a/tests/unit/unittest/gtest-creator-printing.h b/tests/unit/unittest/gtest-creator-printing.h
index 407f16e53e..ea51650f9c 100644
--- a/tests/unit/unittest/gtest-creator-printing.h
+++ b/tests/unit/unittest/gtest-creator-printing.h
@@ -28,11 +28,11 @@
#include <utils/cpplanguage_details.h>
#include <utils/optional.h>
#include <utils/smallstringio.h>
-#include <utils/variant.h>
#include <QtGlobal>
#include <iosfwd>
+#include <variant>
#include <gtest/gtest-printers.h>
@@ -77,6 +77,18 @@ std::ostream &operator<<(std::ostream &out, const ValueViews &valueViews);
} // namespace SessionChangeSetInternal
} // namespace Sqlite
+namespace std {
+
+template<typename Type, typename... Types>
+std::ostream &operator<<(std::ostream &out, const variant<Type, Types...> &v)
+{
+ return visit([&](auto &&value) -> std::ostream & { return out << value; }, v);
+}
+
+std::ostream &operator<<(std::ostream &out, const monostate &);
+
+} // namespace std
+
namespace Utils {
class LineColumn;
class SmallStringView;
@@ -103,12 +115,6 @@ void PrintTo(const optional<Type> &optional, ::std::ostream *os)
*os << optional;
}
-template<typename... Type>
-std::ostream &operator<<(std::ostream &out, const variant<Type...> &variant)
-{
- return Utils::visit([&](auto &&value) -> std::ostream & { return out << value; }, variant);
-}
-
void PrintTo(Utils::SmallStringView text, ::std::ostream *os);
void PrintTo(const Utils::SmallString &text, ::std::ostream *os);
void PrintTo(const Utils::PathString &text, ::std::ostream *os);
@@ -152,6 +158,16 @@ class SourceContext;
std::ostream &operator<<(std::ostream &out, const SourceContext &sourceContext);
} // namespace Cache
+namespace ImageCache {
+class LibraryIconAuxiliaryData;
+class FontCollectorSizeAuxiliaryData;
+class FontCollectorSizesAuxiliaryData;
+
+std::ostream &operator<<(std::ostream &out, const LibraryIconAuxiliaryData &date);
+std::ostream &operator<<(std::ostream &out, const FontCollectorSizeAuxiliaryData &sourceContext);
+std::ostream &operator<<(std::ostream &out, const FontCollectorSizesAuxiliaryData &sourceContext);
+} // namespace ImageCache
+
namespace Storage {
enum class PropertyDeclarationTraits : int;
enum class TypeTraits : int;