21 lines
428 B
C++
21 lines
428 B
C++
|
#pragma once
|
||
|
|
||
|
#include "../type/type.hpp"
|
||
|
|
||
|
namespace util {
|
||
|
|
||
|
template <typename T>
|
||
|
inline constexpr T &&forward(type::remove_reference_t<T> &t) noexcept
|
||
|
{
|
||
|
return static_cast<T &&>(t);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline constexpr T &&forward(type::remove_reference_t<T> &&t) noexcept
|
||
|
{
|
||
|
static_assert(!type::is_lvalue_reference_v<T>, "Can not forward an rvalue as an lvalue.");
|
||
|
return static_cast<T &&>(t);
|
||
|
}
|
||
|
|
||
|
} // namespace util
|