xieite::as<>

Defined in header <xieite/fn/as.hpp>

A functor for casting something implicitly, adding or removing qualifiers, or changing signedness.


Declarations

#0
template<typename T>
constexpr auto as = [][[nodiscard]](std::type_identity_t<T> x) static noexcept {
	return x;
};
Implicitly casts something to another type.

#1
inline constexpr auto as_c = []<typename T>[[nodiscard]](T&& x) static noexcept {
	return const_cast<xieite::add_c<T&&>>(x);
};
Makes something const-qualified.

#2
inline constexpr auto as_v = []<typename T>[[nodiscard]](T&& x) static noexcept {
	return const_cast<xieite::add_v<T&&>>(x);
};
Makes something volatile-qualified.

#3
inline constexpr auto as_cv = []<typename T>[[nodiscard]](T&& x) static noexcept {
	return const_cast<xieite::add_cv<T&&>>(x);
};
Makes something const volatile-qualified.

#4
inline constexpr auto as_not_c = []<typename T>[[nodiscard]](T&& x) static noexcept {
	return const_cast<xieite::rm_c<T&&>>(x);
};
Makes something non-const-qualified.

#5
inline constexpr auto as_not_v = []<typename T>[[nodiscard]](T&& x) static noexcept {
	return const_cast<xieite::rm_v<T&&>>(x);
};
Makes something non-volatile-qualified.

#6
inline constexpr auto as_not_cv = []<typename T>[[nodiscard]](T&& x) static noexcept {
	return const_cast<xieite::rm_cv<T&&>>(x);
};
Makes something non-const volatile-qualified.

#7
inline constexpr auto as_unsign = []<xieite::is_arith T>[[nodiscard]](T x) static noexcept {
	return static_cast<xieite::try_unsign<T>>(x);
};
Makes something arithmetic possibly unsigned.

#8
inline constexpr auto as_sign = []<xieite::is_arith T>[[nodiscard]](T x) static noexcept {
	return static_cast<xieite::try_sign<T>>(x);
};
Makes something arithmetic possibly signed.


Example

int main() {
	int x = 5;
	auto y = xieite::as<double>(x);
	xieite::dump(y);
}
Output:
5
[View in Compiler Explorer]