// -*- C++ -*-
// -----------------------------------------------------------------------------------------------------
// Copyright (c) 2006-2020, Knut Reinert & Freie Universität Berlin
// Copyright (c) 2016-2020, Knut Reinert & MPI für molekulare Genetik
// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
// -----------------------------------------------------------------------------------------------------

/*!\file
 * \brief Provides C++20 additions to the type_traits header.
 * \author Hannes Hauswedell <hannes.hauswedell AT fu-berlin.de>
 */

#pragma once

#include <type_traits>

namespace std
{

/*!\defgroup std_type_traits type_traits
 * \ingroup std
 * \brief The \<concepts\> header from C++20's standard library.
 */

/*!\brief The identity transformation (a transformation_trait that returns the input).
 * \see https://en.cppreference.com/w/cpp/types/type_identity
 * \ingroup std_type_traits
 */
template <typename t>
struct type_identity;

//!\cond
template <typename t>
    requires true
struct type_identity<t>
{
    //!\brief The return type (which is the argument).
    using type = t;
};
//!\endcond

//!\brief A shortcut for std::type_identity.
//!\ingroup std_type_traits
template <typename t>
using type_identity_t = typename type_identity<t>::type;

} // namespace std
