Je essaie de définir un concept avec une expression require qui vérifie l'existence de certaines fonctions membres sur le type.
Le problème auquel je suis confronté est qu'un seul concept doit être branché pour vérifier le type de retour sans aucune opération booléenne précédente comme "not". Cela me force également à écrire des concepts pour l'inverse si nécessaire, ce qui n'est pas vraiment pratique.
Est-ce que quelque chose m'échappe ou y a-t-il une autre bonne manière de le faire?
Exemple simple:
template
concept EstReference = std::is_reference_v;
template
concept AuneFonction = requires (T t) {
{t.func()} -> EstReference; /* c'est correct */
{t.anotherFunc()} -> (not EstReference); /* ce n'est pas correct */
};