mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
Separate out the tests for whether the compiler suports R-value
references from whether it supports an R-value reference *this. No version of GCC today supports the latter, which breaks GCC C++11 compiles of LLVM and Clang now. Also add doxygen comments clarifying what's going on here, and update the usage in Optional. I'll update the usages in Clang next. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168993 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
58b4553549
commit
a5bf44b0b3
@ -55,7 +55,7 @@ public:
|
||||
const T* operator->() const { return getPointer(); }
|
||||
const T& operator*() const LLVM_LVALUE_FUNCTION { assert(hasVal); return x; }
|
||||
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
#if LLVM_HAS_RVALUE_REFERENCE_THIS
|
||||
T&& getValue() && { assert(hasVal); return std::move(x); }
|
||||
T&& operator*() && { assert(hasVal); return std::move(x); }
|
||||
#endif
|
||||
|
@ -30,6 +30,18 @@
|
||||
#define LLVM_USE_RVALUE_REFERENCES 0
|
||||
#endif
|
||||
|
||||
/// \brief Does the compiler support r-value reference *this?
|
||||
///
|
||||
/// Sadly, this is separate from just r-value reference support because GCC
|
||||
/// implemented everything but this thus far. No release of GCC yet has support
|
||||
/// for this feature so it is enabled with Clang only.
|
||||
/// FIXME: This should change to a version check when GCC grows support for it.
|
||||
#if __has_feature(cxx_rvalue_references)
|
||||
#define LLVM_HAS_RVALUE_REFERENCE_THIS 1
|
||||
#else
|
||||
#define LLVM_HAS_RVALUE_REFERENCE_THIS 0
|
||||
#endif
|
||||
|
||||
/// llvm_move - Expands to ::std::move if the compiler supports
|
||||
/// r-value references; otherwise, expands to the argument.
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
@ -41,8 +53,8 @@
|
||||
/// Expands to '&' if r-value references are supported.
|
||||
///
|
||||
/// This can be used to provide l-value/r-value overrides of member functions.
|
||||
/// The r-value override should be guarded by LLVM_USE_RVALUE_REFERENCES
|
||||
#if LLVM_USE_RVALUE_REFERENCES
|
||||
/// The r-value override should be guarded by LLVM_HAS_RVALUE_REFERENCE_THIS
|
||||
#if LLVM_HAS_RVALUE_REFERENCE_THIS
|
||||
#define LLVM_LVALUE_FUNCTION &
|
||||
#else
|
||||
#define LLVM_LVALUE_FUNCTION
|
||||
|
Loading…
x
Reference in New Issue
Block a user