#pragma once #include namespace floormat { template concept AlwaysTrue = true; // from Corrade/Utility/Move.h template constexpr T&& forward(std::remove_reference_t& t) noexcept { return static_cast(t); } template constexpr T&& forward(std::remove_reference_t&& t) noexcept { static_assert(!std::is_lvalue_reference_v); return static_cast(t); } template constexpr std::remove_reference_t&& move(T&& t) noexcept { return static_cast&&>(t); } template void swap(T& a, std::common_type_t& b) noexcept(std::is_nothrow_move_constructible_v && std::is_nothrow_move_assignable_v) { T tmp = static_cast(a); a = static_cast(b); b = static_cast(tmp); } } // namespace floormat