From 2a4d6925bc678e3cfa93e3560ec9a4c7f8e6ec2b Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Mon, 16 Oct 2017 17:20:08 +0100 Subject: 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 Reviewed-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/5201 Reviewed-by: Anthony Gutierrez Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- src/base/compiler.hh | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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 + // 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 +std::unique_ptr +make_unique( Args&&... constructor_args ) +{ + return std::unique_ptr( + new T( std::forward(constructor_args)... ) + ); +} + +#endif // __cplusplus == 201402L + +} //namespace m5 + #endif // __BASE_COMPILER_HH__ -- cgit v1.2.3