diff --git a/tests/auto/corelib/text/qchar/tst_qchar.cpp b/tests/auto/corelib/text/qchar/tst_qchar.cpp index fae507f4c6d..3428988f858 100644 --- a/tests/auto/corelib/text/qchar/tst_qchar.cpp +++ b/tests/auto/corelib/text/qchar/tst_qchar.cpp @@ -6,6 +6,61 @@ #include #include +#include + +template +constexpr inline bool implicitly = std::is_convertible_v; +template +constexpr inline bool explicitly = std::is_constructible_v; +template +constexpr inline bool disabled = !explicitly; + +// +// Conversion from character types +// +static_assert(implicitly); +#ifdef __cpp_char8_t +static_assert(explicitly); // via integer promotion +#endif +static_assert(implicitly); +#ifdef Q_OS_WIN +static_assert(implicitly); +#else +static_assert(explicitly); +#endif +static_assert(explicitly); + +// +// Conversion from others +// +static_assert(explicitly); +static_assert(implicitly); +static_assert(implicitly); +static_assert(explicitly); +static_assert(explicitly); + +// +// Disabled conversions (from Qt 6.9) +// +static_assert(explicitly); // via integer promotion +static_assert(disabled); +static_assert(explicitly); // via integer promotion +static_assert(disabled); +static_assert(disabled); +static_assert(disabled); +static_assert(disabled); +static_assert(explicitly); // via promotion to underlying_type_t +enum E1 {}; +static_assert(explicitly); // ditto +enum class E2 {}; +static_assert(disabled); +#ifndef Q_OS_QNX // ¯\_(ツ)_/¯ +enum E1C : char16_t {}; +static_assert(explicitly); +#endif +enum class E2C : char16_t {}; +static_assert(disabled); + class tst_QChar : public QObject { Q_OBJECT