Bonjour, je vois l'intérêt de static_assert (c++0x), mais je ne vois pas comment l'utiliser dans mon cas (je n'ai que trouvé l'exemple de la FAQ de c++0x sur google).
J'ai une fonction, qui prend un pointeur de fonction membre et pointeur vers un objet (ces 2 paramètres sont templates). Puisque gcc me sort une erreur inintelligible quand on passe les mauvais arguments (on se retrouve avec un message d'erreur de 10 lignes avec plein de "instantiated from here"), je voudrais fournir un message d'erreur plus clair dans ce cas :
Le pointeur de fonction membre est du type R(T::*)(Args...)
L'objet est du type O.
J'aimerais faire : static_assert(static_cast<T*>(O*), "Impossible to cast from O.type to T.type in function...");
Sauf que static_cast veut des objets et non des types et que si je met l'objet (au lieu de O*), il dit que ce n'est pas une expression constante.
De plus, comment afficher un O.type et T.type ? Y a t-il un moyen d'afficher le type des paramètre templates ?
Merci à tous.
[EDIT] Je crois qu'il me faudrait un boost::is_convertible. Y a t-il déjà quelque chose comme sa sans utiliser boost ? Je vais regarder comment boost fait...
Partager