diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index b5783be83f..ebb99d3180 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -519,14 +519,14 @@ QVariant::QVariant(const QVariant &p) } /*! - \fn template = true> QVariant::QVariant(std::in_place_type_t, Args&&... args) noexcept(is_noexcept_constructible, Args...>::value) + \fn template = true> QVariant::QVariant(std::in_place_type_t, Args&&... args) noexcept(is_noexcept_constructible, Args...>::value) \since 6.6 - Constructs a new variant containing a value of type \c Type. The contained + Constructs a new variant containing a value of type \c T. The contained value is is initialized with the arguments \c{std::forward(args)...}. - This overload only participates in overload resolution if \c Type can be + This overload only participates in overload resolution if \c T can be constructed from \a args. This constructor is provided for STL/std::any compatibility. @@ -536,7 +536,7 @@ QVariant::QVariant(const QVariant &p) /*! - \fn template &, Args...> = true> explicit QVariant::QVariant(std::in_place_type_t, std::initializer_list il, Args&&... args) noexcept(is_noexcept_constructible, std::initializer_list &, Args... >::value) + \fn template &, Args...> = true> explicit QVariant::QVariant(std::in_place_type_t, std::initializer_list il, Args&&... args) noexcept(is_noexcept_constructible, std::initializer_list &, Args... >::value) \since 6.6 \overload @@ -547,18 +547,18 @@ QVariant::QVariant(const QVariant &p) /*! - \fn template = true> QVariant::emplace(Args&&... args) + \fn template = true> QVariant::emplace(Args&&... args) \since 6.6 Replaces the object currently held in \c{*this} with an object of - type \c{Type}, constructed from \a{args}\c{...}. If \c{*this} was non-null, + type \c{T}, constructed from \a{args}\c{...}. If \c{*this} was non-null, the previously held object is destroyed first. If possible, this method will reuse memory allocated by the QVariant. Returns a reference to the newly-created object. */ /*! - \fn template &, Args...> = true> QVariant::emplace(std::initializer_list list, Args&&... args) + \fn template &, Args...> = true> QVariant::emplace(std::initializer_list list, Args&&... args) \since 6.6 \overload diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index 00e2bb0072..b1865e442b 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -62,12 +62,12 @@ template<> constexpr inline bool qIsRelocatable = true; } class Q_CORE_EXPORT QVariant { - template + template using if_constructible = std::enable_if_t< std::conjunction_v< - std::is_copy_constructible>, - std::is_destructible>, - std::is_constructible, Args...> + std::is_copy_constructible>, + std::is_destructible>, + std::is_constructible, Args...> >, bool>; @@ -217,34 +217,34 @@ public: QVariant(const QVariant &other); private: - template + template using is_noexcept_constructible = std::conjunction< - std::bool_constant>, - std::is_nothrow_constructible + std::bool_constant>, + std::is_nothrow_constructible >; public: - template = true> - explicit QVariant(std::in_place_type_t, Args&&... args) - noexcept(is_noexcept_constructible, Args...>::value) - : QVariant(std::in_place, QMetaType::fromType>() ) + template = true> + explicit QVariant(std::in_place_type_t, Args&&... args) + noexcept(is_noexcept_constructible, Args...>::value) + : QVariant(std::in_place, QMetaType::fromType>() ) { void *data = const_cast(constData()); - new (data) Type(std::forward(args)...); + new (data) T(std::forward(args)...); } - template &, Args...> = true> - explicit QVariant(std::in_place_type_t, std::initializer_list il, Args&&... args) - noexcept(is_noexcept_constructible, - std::initializer_list &, + template &, Args...> = true> + explicit QVariant(std::in_place_type_t, std::initializer_list il, Args&&... args) + noexcept(is_noexcept_constructible, + std::initializer_list &, Args... >::value) - : QVariant(std::in_place, QMetaType::fromType>()) + : QVariant(std::in_place, QMetaType::fromType>()) { char *data = static_cast(const_cast(constData())); - new (data) Type(il, std::forward(args)...); + new (data) T(il, std::forward(args)...); } // primitives @@ -445,40 +445,40 @@ public: inline const void *data() const { return constData(); } private: - template + template void verifySuitableForEmplace() { - static_assert(!std::is_reference_v, + static_assert(!std::is_reference_v, "QVariant does not support reference types"); - static_assert(!std::is_const_v, + static_assert(!std::is_const_v, "QVariant does not support const types"); - static_assert(std::is_copy_constructible_v, + static_assert(std::is_copy_constructible_v, "QVariant requires that the type is copyable"); - static_assert(std::is_destructible_v, + static_assert(std::is_destructible_v, "QVariant requires that the type is destructible"); } - template - Type &emplaceImpl(Args&&... args) + template + T &emplaceImpl(Args&&... args) { - verifySuitableForEmplace(); - auto data = static_cast(prepareForEmplace(QMetaType::fromType())); + verifySuitableForEmplace(); + auto data = static_cast(prepareForEmplace(QMetaType::fromType())); return *q20::construct_at(data, std::forward(args)...); } public: - template = true> - Type &emplace(Args&&... args) + template = true> + T &emplace(Args&&... args) { - return emplaceImpl(std::forward(args)...); + return emplaceImpl(std::forward(args)...); } - template &, Args...> = true> - Type &emplace(std::initializer_list list, Args&&... args) + template &, Args...> = true> + T &emplace(std::initializer_list list, Args&&... args) { - return emplaceImpl(list, std::forward(args)...); + return emplaceImpl(list, std::forward(args)...); } template, QVariant>>>