summaryrefslogtreecommitdiffhomepage
path: root/compat/non-const.hpp
blob: f04827b78aab7b734f478f6c8a0d3344728fc640 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once

namespace floormat {

template<typename T> T& non_const(const T& value) { return const_cast<T&>(value); }
template<typename T> T& non_const(T& value) = delete;
template<typename T> T& non_const(T&&) = delete;
template<typename T> T& non_const(const T&& value) = delete;

template<typename T> T& non_const_(const T& value) { return const_cast<T&>(value); }
template<typename T> T& non_const_(T& value) { return value; }
template<typename T> T& non_const_(T&& value) { return static_cast<T&>(value); }
template<typename T> T& non_const_(const T&& value) { return static_cast<T&>(const_cast<T&&>(value)); }

} // namespace floormat