4 ms·
template<auto V> concept non_zero = (V != 0); template<typename T> concept arithmetic = std::is_arithmetic_v<T>; template<arithmetic T> requires non
by kachapopopow 11mo ago
template<auto V>
concept non_zero = (V != 0);
template<typename T>
concept arithmetic = std::is_arithmetic_v<T>;
template<arithmetic T>
requires non_zero<T{42}>
struct complicated {
template<auto... Values>
using nested_alias = std::tuple<
std::integral_constant<decltype(Values), Values>...,
std::conditional_t<(Values > 0 && ...), T, std::nullptr_t>
>;
template<typename... Ts>
static constexpr auto process() {
return []<std::size_t... Is>(std::index_sequence<Is...>) {
return nested_alias<(sizeof(Ts) + Is)...>{};
}(std::make_index_sequence<sizeof...(Ts)>{});
}
};
I most definitely agree.
- usrnm 11mo agoThe difference is that nobody really writes application code like that, it's a tool for writing libraries and creating abstractions. If all of the ugliness of async Rust was contained inside Tokio, I would have zero problems with it, but it just infects everything it touches
- bnolsen 11mo agoUnfortunately it makes the libraries difficult (or at least very tedious) to read. I find zig's standard library a very good reference for figuring out to do things in application space, from what I've seen it's been very clear and useful.