Stratax 0.2.0
Loading...
Searching...
No Matches
TypeValidation.hpp
1#pragma once
2
3#include <type_traits>
4
5#include <stratax/core/Concepts.hpp>
6#include <stratax/core/Exceptions.hpp>
7
8namespace stratax::core::validation {
9
19template<typename Actual, typename Expected>
20void require_type(const char* message)
21{
22 if constexpr (!std::same_as<std::remove_cvref_t<Actual>, std::remove_cvref_t<Expected>>)
23 {
24 throw Exceptions::TypeError(message);
25 }
26}
27
36template<typename T>
37void require_numeric_type(const char* message)
38{
39 if constexpr (!Numeric<T>)
40 {
41 throw Exceptions::TypeError(message);
42 }
43}
44
54template<typename Lhs, typename Rhs>
55requires requires
56{
57 typename Lhs::value_type;
58 typename Rhs::value_type;
59}
60void require_same_value_type(const Lhs& lhs, const Rhs& rhs, const char* message)
61{
62 (void)lhs;
63 (void)rhs;
64 require_type<typename Lhs::value_type, typename Rhs::value_type>(message);
65}
66
67}