J'ai une fonction constexpr
qui regroupe plusieurs static_asserts
pour les contrats de conception. Je voudrais l'appeler au moment de la compilation, sans avoir à créer une variable constexpr
non utilisée.Déclenchez void constexpr au moment de la compilation?
Voici un exemple de ce que j'ai actuellement à faire (C++ 17).
template<size_t N = 0, typename... Ts, typename F>
inline constexpr int tuple_for(const std::tuple<Ts...>& t, const F& func) {
func(std::get<N>(t));
if constexpr(N < sizeof...(Ts) - 1) {
return tuple_for<N + 1, Ts...>(t, func);
} else {
return 0;
}
}
auto do_checks = [](const auto& t) {
static_assert(has_some_method_v<decltype(t)>,
"You need some_method");
return 0;
}
[[maybe_unused]]
constexpr int i_am_sad = tuple_for(my_tuple, do_checks);
Existe-t-il un autre moyen d'obtenir ce comportement? Peut-être quelque chose de nouveau en C++ 17?
Merci.
edit: Notez que comme ces vérifications doivent être généralisées, je crois qu'avoir les asserts dans une fonction est la bonne façon d'y aller.
Vous n'avez pas vraiment besoin d'une fonction wrapper, mettez simplement static_assert' tel quel. – VTT
Je devrais modifier l'exemple, cela fonctionne sur un tuple d'objet. Donc, dans la base de code réelle, il doit être. – scx
pourquoi avez-vous besoin de revenir? il suffit d'appeler cette fonction sans valeur de retour. – Kobi