#pragma once namespace floormat { template T& non_const(const T& value) { return const_cast(value); } template T& non_const(T& value) = delete; template T& non_const(T&&) = delete; template T& non_const(const T&& value) = delete; template T& non_const_(const T& value) { return const_cast(value); } template T& non_const_(T& value) { return value; } template T& non_const_(T&& value) { return static_cast(value); } template T& non_const_(const T&& value) { return static_cast(const_cast(value)); } } // namespace floormat