Add [[trivial_abi]] to Detail::unique_ptr when compiled with Clang

This decreases code size and improves performance of passing around
`unique_ptr` instances by value somewhat. It virtually guarantees
problems when combining code compiled with Clang and GCC, but that
was never supported anyway.
This commit is contained in:
Martin Hořeňovský 2021-09-30 20:10:56 +02:00
parent eb452e9b35
commit 1d79683ea8
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A

View File

@ -11,13 +11,22 @@
#include <cassert>
#include <type_traits>
#if defined(__clang__) && defined(__has_attribute)
# if __has_attribute(trivial_abi)
# define TRIVIAL_ABI [[clang::trivial_abi]]
# endif
#endif
#if !defined(TRIVIAL_ABI)
# define TRIVIAL_ABI
#endif
namespace Catch {
namespace Detail {
// reimplementation of unique_ptr for improved compilation times
// Does not support custom deleters (and thus does not require EBO)
// Does not support arrays
template <typename T>
class unique_ptr {
class TRIVIAL_ABI unique_ptr {
T* m_ptr;
public:
constexpr unique_ptr(std::nullptr_t = nullptr):