1#ifndef NNGN_UTILS_CONCEPTS_H
2#define NNGN_UTILS_CONCEPTS_H
11concept trivial = std::is_trivial_v<T>;
14concept standard_layout = std::is_standard_layout_v<T>;
16template<
typename D,
typename B>
19 std::is_base_of_v<B, D>
20 && std::is_convertible_v<const volatile D*, const volatile B*>;
22 std::derived_from<D, B>;
26template<
typename From,
typename To>
27concept convertible_to_strict =
28 std::convertible_to<From, To>
29 &&
requires(From
f) { { To{
f} } -> std::same_as<To>; };