Hello,

J'ai défini une classe templatisée (appelons la MaClasse) ayant sémantique de valeur. J'ai donc défini les opérateurs de comparaison.

Si B dérive de A, j'aimerais pouvoir comparer des instances MaClasse<A> et MaClasse<B>. Je comptais donc y aller à coup de enable_if et isbase_of :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
template<typename T, typename IndexType=typename T::IndexType>
struct SafeIndex
{
    IndexType value;
    ...
    template <class U, template <typename> class V, class = typename std::enable_if<std::isbase_of<T,U>::value>>
    friend bool operator == (const SafeIndex<T>& lhs, const SafeIndex<U>& rhs) { return lhs.value == rhs.value; }
    ...
};
Malheureusement, ça ne fonctionne pas : j'obtiens une erreur Visual C4519 :
default template arguments are only allowed on a class template

Comment faire ??

Merci.