Files
cex/examples/types/types.hpp
2026-09-07 15:52:46 -04:00

26 lines
883 B
C++

#pragma once
#include <concepts>
#include <vector>
namespace demo {
template<class T> concept Addable = requires(T a) { a + a; };
template<class T> concept Sized = requires(T a) { a.size(); };
struct Base { int id; };
struct Helper { int work() { return 1; } };
template<Addable T>
requires std::copyable<T> && (Addable<T> || Sized<T>)
struct Box : Base {
T value;
std::vector<T> entries;
Helper helper;
using value_type = T;
Box(Addable auto x) requires std::constructible_from<T, decltype(x)> : value(x) { helper.work(); }
template<Sized U> requires requires(U u) { u.size(); }
void set(const U& u) requires Addable<T> { helper.work(); }
void run(std::integral auto n) { helper.work(); }
template<class U> requires std::convertible_to<U, T>
void assign(U u) { value = u; }
};
using IntBox = Box<int>;
enum class State { idle, ready };
}