mirror of
https://github.com/asmjit/asmjit.git
synced 2025-12-16 20:17:05 +03:00
[Bug] Fixed compile-time issue with ASMJIT_NONCOPYABLE/NONCONSTRUCTIBLE for GCC 11 in C++20 mode (#343)
* fixed GCC 11 compilation in C++20 mode (don't use template parameters in constructors/operator assignment) * refactored ASMJIT_NONCOPYABLE/NONCONSTRUCTIBLE (variadic macros not needed)
This commit is contained in:
@@ -514,18 +514,14 @@ namespace asmjit {
|
||||
// [asmjit::Build - Globals - Utilities]
|
||||
// ============================================================================
|
||||
|
||||
#define ASMJIT_NONCOPYABLE(...) \
|
||||
private: \
|
||||
__VA_ARGS__(const __VA_ARGS__& other) = delete; \
|
||||
__VA_ARGS__& operator=(const __VA_ARGS__& other) = delete; \
|
||||
public:
|
||||
#define ASMJIT_NONCOPYABLE(Type) \
|
||||
Type(const Type& other) = delete; \
|
||||
Type& operator=(const Type& other) = delete;
|
||||
|
||||
#define ASMJIT_NONCONSTRUCTIBLE(...) \
|
||||
private: \
|
||||
__VA_ARGS__() = delete; \
|
||||
__VA_ARGS__(const __VA_ARGS__& other) = delete; \
|
||||
__VA_ARGS__& operator=(const __VA_ARGS__& other) = delete; \
|
||||
public:
|
||||
#define ASMJIT_NONCONSTRUCTIBLE(Type) \
|
||||
Type() = delete; \
|
||||
Type(const Type& other) = delete; \
|
||||
Type& operator=(const Type& other) = delete;
|
||||
|
||||
// ============================================================================
|
||||
// [asmjit::Build - Globals - Cleanup]
|
||||
|
||||
@@ -41,6 +41,7 @@ ASMJIT_BEGIN_NAMESPACE
|
||||
|
||||
class GlobalConstPoolPass : public Pass {
|
||||
typedef Pass Base;
|
||||
public:
|
||||
ASMJIT_NONCOPYABLE(GlobalConstPoolPass)
|
||||
|
||||
GlobalConstPoolPass() noexcept : Pass("GlobalConstPoolPass") {}
|
||||
|
||||
@@ -40,9 +40,9 @@ ASMJIT_BEGIN_NAMESPACE
|
||||
// ============================================================================
|
||||
|
||||
class RAAssignment {
|
||||
public:
|
||||
ASMJIT_NONCOPYABLE(RAAssignment)
|
||||
|
||||
public:
|
||||
enum Ids : uint32_t {
|
||||
kPhysNone = 0xFF,
|
||||
kWorkNone = RAWorkReg::kIdNone
|
||||
|
||||
@@ -496,7 +496,7 @@ public:
|
||||
template<typename T>
|
||||
class RALiveSpans {
|
||||
public:
|
||||
ASMJIT_NONCOPYABLE(RALiveSpans<T>)
|
||||
ASMJIT_NONCOPYABLE(RALiveSpans)
|
||||
|
||||
typedef typename T::DataType DataType;
|
||||
ZoneVector<T> _data;
|
||||
|
||||
@@ -371,7 +371,7 @@ public:
|
||||
template<size_t N>
|
||||
class StringTmp : public String {
|
||||
public:
|
||||
ASMJIT_NONCOPYABLE(StringTmp<N>)
|
||||
ASMJIT_NONCOPYABLE(StringTmp)
|
||||
|
||||
//! Embedded data.
|
||||
char _embeddedData[Support::alignUp(N + 1, sizeof(size_t))];
|
||||
|
||||
@@ -391,7 +391,7 @@ public:
|
||||
template<size_t N>
|
||||
class ZoneTmp : public Zone {
|
||||
public:
|
||||
ASMJIT_NONCOPYABLE(ZoneTmp<N>)
|
||||
ASMJIT_NONCOPYABLE(ZoneTmp)
|
||||
|
||||
//! Temporary storage, embedded after \ref Zone.
|
||||
struct Storage {
|
||||
|
||||
@@ -175,7 +175,7 @@ public:
|
||||
template<typename NodeT>
|
||||
class ZoneHash : public ZoneHashBase {
|
||||
public:
|
||||
ASMJIT_NONCOPYABLE(ZoneHash<NodeT>)
|
||||
ASMJIT_NONCOPYABLE(ZoneHash)
|
||||
|
||||
typedef NodeT Node;
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ public:
|
||||
template<typename T>
|
||||
class ZoneStack : public ZoneStackBase {
|
||||
public:
|
||||
ASMJIT_NONCOPYABLE(ZoneStack<T>)
|
||||
ASMJIT_NONCOPYABLE(ZoneStack)
|
||||
|
||||
enum : uint32_t {
|
||||
kNumBlockItems = uint32_t((kBlockSize - sizeof(Block)) / sizeof(T)),
|
||||
|
||||
@@ -143,7 +143,7 @@ public:
|
||||
template <typename T>
|
||||
class ZoneVector : public ZoneVectorBase {
|
||||
public:
|
||||
ASMJIT_NONCOPYABLE(ZoneVector<T>)
|
||||
ASMJIT_NONCOPYABLE(ZoneVector)
|
||||
|
||||
// STL compatibility;
|
||||
typedef T value_type;
|
||||
|
||||
Reference in New Issue
Block a user