2
3
4
5
6
7
8
11#ifndef _GLSL_STRUCT_VEC_TRAITS_CONCEPT_HPP
12 #define _GLSL_STRUCT_VEC_TRAITS_CONCEPT_HPP
14 #include <glslstruct/config.hpp>
17_GLSL_STRUCT_ERROR(
"This is only available for c++17 and greater!");
20 #include <glslstruct/utils/array_traits.hpp>
21 #include <glslstruct/utils/ValueType.hpp>
27
28
29
30
31
32
33
34
35
36
37
38
39
47
48
49
50
51
54
55
56
57
58
62
63
64
65
67 concept glsl_vec = requires {
68 { vec_traits<T>::get_length() } -> std::convertible_to<size_t>;
69 { vec_traits<T>::get_value_type() } -> std::convertible_to<ValueType>;
70 { vec_traits<T>::get_data(std::declval<
const T&>()) } -> std::convertible_to<vec_data>;
71 { vec_traits<T>::get_value(std::declval<
const vec_data&>()) } -> std::convertible_to<T>;
75 static _GLSL_STRUCT_CONSTEXPR17
bool is_glsl_vec_v = glsl_vec<T>;
78 struct is_glsl_vec : std::bool_constant<is_glsl_vec_v<T> > {};
81 template<
typename T,
typename =
void>
82 struct is_glsl_vec : std::false_type {};
86 std::void_t<std::enable_if_t<std::is_convertible_v<
decltype(vec_traits<T>::get_length()), size_t> >,
87 std::enable_if_t<std::is_convertible_v<
decltype(vec_traits<T>::get_value_type()), ValueType> >,
88 std::enable_if_t<std::is_convertible_v<
decltype(vec_traits<T>::get_data(std::declval<
const T&>())), vec_data> >,
89 std::enable_if_t<std::is_convertible_v<
decltype(vec_traits<T>::get_value(std::declval<
const vec_data&>())), T> > > >
98 #pragma region IS_VECS_ARRAY
100
101
102
103
108
109
110
111
117
118
119
120
121 template<
class V> concept glsl_vecs_array = is_glsl_vecs_array_v<V>;
124
125
126
127
128 template<
class V> concept glsl_vecs_static_size_array = is_glsl_vecs_static_size_array_v<V>;
#define _GLSL_STRUCT_HAS_CXX20
check if compiler has c++ version greater or equal to c++20 and if user enabled c++20 features using ...
Definition config.hpp:142
#define _GLSL_STRUCT_HAS_CXX17
check if compiler has c++ version greater or equal to c++17
Definition config.hpp:130
#define _GLSL_STRUCT_CONSTEXPR17
constexpr for c++17 and higher
Definition config.hpp:196