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>
This commit is contained in:
@@ -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__
|
||||
|
||||
Reference in New Issue
Block a user