From 3328da3da1183014efa0c1b094c3cc542d50f7e7 Mon Sep 17 00:00:00 2001 From: David Wells Date: Sat, 8 Apr 2017 17:57:39 -0400 Subject: [PATCH] Wrap C++14's std::make_unique as std_cxx14::make_unique. --- include/deal.II/base/std_cxx14/memory.h | 46 +++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 include/deal.II/base/std_cxx14/memory.h diff --git a/include/deal.II/base/std_cxx14/memory.h b/include/deal.II/base/std_cxx14/memory.h new file mode 100644 index 0000000000..437bb81bf3 --- /dev/null +++ b/include/deal.II/base/std_cxx14/memory.h @@ -0,0 +1,46 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2017 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- +#ifndef dealii__cxx14_memory_h +#define dealii__cxx14_memory_h + +#include + +#include + +#ifndef DEAL_II_WITH_CXX14 +// needed for array type check +# include +#endif + +DEAL_II_NAMESPACE_OPEN +namespace std_cxx14 +{ +#ifdef DEAL_II_WITH_CXX14 + using std::make_unique; +#else + template + inline + std::unique_ptr + make_unique(Args &&... constructor_arguments) + { + static_assert(!std::is_array::value, + "This function is not implemented for array types."); + return std::unique_ptr(new T(std::forward(constructor_arguments)...)); + } +#endif +} +DEAL_II_NAMESPACE_CLOSE + +#endif // dealii__cxx14_memory_h -- 2.39.5