/*
 * Copyright (C) 2016 Kernkonzept GmbH.
 * Author(s): Philipp Eppelt <philipp.eppelt@kernkonzept.com>
 *
 * This file is distributed under the terms of the GNU General Public
 * License, version 2. Please see the COPYING-GPL-2 file for details.
 *
 * As a special exception, you may use this file as part of a free software
 * library without restriction. Specifically, if other files instantiate
 * templates or use macros or inline functions from this file, or you compile
 * this file and link it with other files to produce an executable, this
 * file does not by itself cause the resulting executable to be covered by
 * the GNU General Public License. This exception does not however
 * invalidate any other reasons why the executable file might be covered by
 * the GNU General Public License.
 */
#pragma once

#include <memory>
#include <utility>

namespace std { namespace L4 {

/// Create an object of type `T` and return it inside a std::unique_ptr.
template <typename T, typename... Args>
inline ::std::unique_ptr<T> make_unique(Args &&... args)
{
  return ::std::unique_ptr<T>(new T(::std::forward<Args>(args)...));
}

}} // namespace L4, namespace std
