[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:
tetzank
2021-09-03 14:52:26 +02:00
committed by GitHub
parent d02235b834
commit d0d14ac774
9 changed files with 15 additions and 18 deletions

View File

@@ -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]

View File

@@ -41,6 +41,7 @@ ASMJIT_BEGIN_NAMESPACE
class GlobalConstPoolPass : public Pass {
typedef Pass Base;
public:
ASMJIT_NONCOPYABLE(GlobalConstPoolPass)
GlobalConstPoolPass() noexcept : Pass("GlobalConstPoolPass") {}

View File

@@ -40,9 +40,9 @@ ASMJIT_BEGIN_NAMESPACE
// ============================================================================
class RAAssignment {
public:
ASMJIT_NONCOPYABLE(RAAssignment)
public:
enum Ids : uint32_t {
kPhysNone = 0xFF,
kWorkNone = RAWorkReg::kIdNone

View File

@@ -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;

View File

@@ -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))];

View File

@@ -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 {

View File

@@ -175,7 +175,7 @@ public:
template<typename NodeT>
class ZoneHash : public ZoneHashBase {
public:
ASMJIT_NONCOPYABLE(ZoneHash<NodeT>)
ASMJIT_NONCOPYABLE(ZoneHash)
typedef NodeT Node;

View File

@@ -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)),

View File

@@ -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;