Bon, j'ai une hierarchie de classe template qui contiennent toutes une enumeration appelé vec_size qui contient la taille de la donnée (na je ferais pas autrement).
A un moment j'ai cette situation :
Code :
- // class binary_node
- // Expession Templates placeholder for binary node in AST representation
- template<class OP, class LHS, class RHS> class binary_node
- {
- public:
- typedef typename LHS::elt_t elt_t;
- typedef LHS lhs_t;
- typedef RHS rhs_t;
-
- enum {vec_size =( LHS::vec_size==0 ? (LHS::vec_size) : (RHS::vec_size) )};
- binary_node( const lhs_t& lhs, const rhs_t& rhs ) : mLHS(lhs),mRHS(rhs) {}
-
- lhs_t& getLHS() const { return mLHS; }
- rhs_t& getRHS() const { return mRHS; }
- elt_t operator[]( size_t i ) { return OP::apply(mLHS[i],mRHS[i]); }
- private:
- lhs_t mLHS;
- rhs_t mRHS;
- };
|
si je compile je me prends le warning suivant :
Code :
- warning: enumeral mismatch in conditional expression:
|
La doc de GCC me dit d'utilisez -fcond-mismatch mais cette option est désactivée
le seul moyen que j'ai est de caster comme un porc mes enums en int
Code :
- enum {vec_size =( LHS::vec_size==0 ? (int)(LHS::vec_size) : (int)(RHS::vec_size) )};
|
je trouve ca moche .... y aurait il un equivalent de -fcond-mismatch valide e C+ ???
Message édité par Joel F le 31-07-2003 à 14:58:56