PrevUpHomeNext

esv::same_assert


Man and nature coexist.

esv::same_assert, esv::same_strip_assert

esv::same_assert and esv::same_strip_assert are used to test if two types are the same or not the same. They are alias template, being useful at compile-time.

esv::same_assert<t1, t2>() is the shorthand combination of static_assert(std::same_as<t1, t2>)

esv::same_strip_assert<t1, t2>() is the shorthand combination of static_assert(std::same_as<std::remove_cvref_t<t1>, std::remove_cvref_t<t2>>)

esv::same_assert Calling Sig

esv::same_assert<type_xt, type_yt, true>();
esv::same_assert<type_xt, type_yt, false>();
esv::same_assert<type_xt, type_yt>();	// Default true

esv::same_assert is alias template of class esv::same_assert_class, whose constructor is consteval, and static_assert is evaluated at its constructor.

esv::same_strip_assert Calling Sig

esv::same_strip_assert<type_xt, type_yt, true>();
esv::same_strip_assert<type_xt, type_yt, false>();
esv::same_strip_assert<type_xt, type_yt>();	// Default true

esv::same_strip_assert is alias template of class esv::same_strip_assert_class, whose constructor is consteval, and static_assert is evaluated at its constructor.

The difference between esv::same_strip_assert and esv::same_assert is that esv::same_strip_assert will apply esv::remove_cvref_t before calling static_assert<esv::same_as<... .

c++ example

#include <esvcpp/core.hpp>
#include <iostream>

int main()
{
	const int & x = 123;
	esv::same_assert<decltype(x), int, false>();

	esv::same_assert<esv::i32, esv::i32>();

	esv::same_strip_assert<decltype(x), int, true>();
	esv::same_strip_assert<decltype(x), int>();

	std::cout << "pass\n";
	esv::print("pass");
}

See Also

esv::same_as

esv::remove_cvref_t

esv::mean_t


PrevUpHomeNext

esv::print