Stratax
0.2.0
Toggle main menu visibility
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
8
namespace
stratax::core::validation {
9
19
template
<
typename
Actual,
typename
Expected>
20
void
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
36
template
<
typename
T>
37
void
require_numeric_type(
const
char
* message)
38
{
39
if
constexpr
(!Numeric<T>)
40
{
41
throw
Exceptions::TypeError(message);
42
}
43
}
44
54
template
<
typename
Lhs,
typename
Rhs>
55
requires
requires
56
{
57
typename
Lhs::value_type;
58
typename
Rhs::value_type;
59
}
60
void
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
}
include
stratax
core
validation
TypeValidation.hpp
Generated by
1.17.0