diff options
author | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2017-10-16 17:20:08 +0100 |
---|---|---|
committer | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2017-10-20 08:32:03 +0000 |
commit | 2a4d6925bc678e3cfa93e3560ec9a4c7f8e6ec2b (patch) | |
tree | b7b20269d934deeea4b931eca5d691a6de67105b /src/base | |
parent | cc52235454bc1bf60100e15043d89019b857d134 (diff) | |
download | gem5-2a4d6925bc678e3cfa93e3560ec9a4c7f8e6ec2b.tar.xz |
base: Defining make_unique for C++11
std::make_unique is not available for C++11 compilers, and it has been
introduced only in C++14. Since gem5 is not officially supporting the
latter at the moment, this patch allows to use it in gem5 if including
base/compiler.hh. If compiled under C++14, std::make_unique will be
used instead.
Change-Id: Ibf1897fad0a1eb1cb0c683cc25170feaa6841997
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/5201
Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/base')
-rw-r--r-- | src/base/compiler.hh | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/base/compiler.hh b/src/base/compiler.hh index 9cad07d7a..2fdd323b9 100644 --- a/src/base/compiler.hh +++ b/src/base/compiler.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 ARM Limited + * Copyright (c) 2012,2017 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -43,6 +43,8 @@ #ifndef __BASE_COMPILER_HH__ #define __BASE_COMPILER_HH__ +#include <memory> + // http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html #if defined(__GNUC__) // clang or gcc @@ -61,4 +63,28 @@ # define M5_CLASS_VAR_USED #endif +// std::make_unique redefined for C++11 compilers +namespace m5 +{ + +#if __cplusplus == 201402L // C++14 + +using std::make_unique; + +#else // C++11 + +/** Defining custom version of make_unique: m5::make_unique<>() */ +template<typename T, typename... Args> +std::unique_ptr<T> +make_unique( Args&&... constructor_args ) +{ + return std::unique_ptr<T>( + new T( std::forward<Args>(constructor_args)... ) + ); +} + +#endif // __cplusplus == 201402L + +} //namespace m5 + #endif // __BASE_COMPILER_HH__ |