Upgrade to C++20 (#7554)
* Compile in C++20 mode
* Fix implicit lambda captures of `this` by `[=]`
Those implicit captures were deprecated in C++20
* Silence MSVC atomic std::shared_ptr warning
Unfortunately std::atomic<std::shared_ptr> (P0718R2) is not supported by
GCC until GCC 12 and still is not supported by Clang or Apple Clang, so
it looks like we will continue using std::atomic_load for the time being
* Use C++20 in RemoteVstPlugin
* Simplification
* Add comment
* Fix bitwise operations between different enumeration types
* Revert "Fix bitwise operations between different enumeration types"
This reverts commit d45792cd72.
* Use a helper function to combine keys and modifiers
* Remove AnalyzeTemporaryDtors from .clang-tidy
AnalyzeTemporaryDtors was deprecated in clang-tidy 16 and fully removed
in clang-tidy 18
* Use C++20 in .clang-format
* Use bitwise OR
Prevents issues if any enum flags in `args` have bits in common
This commit is contained in:
@@ -27,7 +27,10 @@
|
||||
#ifndef LMMS_DEPRECATIONHELPER_H
|
||||
#define LMMS_DEPRECATIONHELPER_H
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
#include <QFontMetrics>
|
||||
#include <QKeySequence>
|
||||
#include <QWheelEvent>
|
||||
|
||||
namespace lmms
|
||||
@@ -64,6 +67,30 @@ inline QPoint position(QWheelEvent *wheelEvent)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
namespace detail
|
||||
{
|
||||
|
||||
template<typename T>
|
||||
inline constexpr bool IsKeyOrModifier = std::is_same_v<T, Qt::Key>
|
||||
|| std::is_same_v<T, Qt::Modifier> || std::is_same_v<T, Qt::KeyboardModifier>;
|
||||
|
||||
} // namespace detail
|
||||
|
||||
|
||||
/**
|
||||
* @brief Combines Qt key and modifier arguments together,
|
||||
* replacing `A | B` which was deprecated in C++20
|
||||
* due to the enums being different types. (P1120R0)
|
||||
* @param args Any number of Qt::Key, Qt::Modifier, or Qt::KeyboardModifier
|
||||
* @return The combination of the given keys/modifiers as an int
|
||||
*/
|
||||
template<typename... Args, std::enable_if_t<(detail::IsKeyOrModifier<Args> && ...), bool> = true>
|
||||
constexpr int combine(Args... args)
|
||||
{
|
||||
return (0 | ... | static_cast<int>(args));
|
||||
}
|
||||
|
||||
} // namespace lmms
|
||||
|
||||
#endif // LMMS_DEPRECATIONHELPER_H
|
||||
|
||||
Reference in New Issue
Block a user