Bonjour,

au boulot, j'ai un warning en Release sous Visual 2008 dans le code d'un template instancié avec une classe dérivée d'MFC.

Voici le warning :

CongesView.cpp
d:\(...)\EventHandler.h(42) : warning C4121: 'event::MemberEventHandler<R,ARG>' : alignment of a member was sensitive to packing
with
[
R=CCongesView,
ARG=const CacheConges &
]
d:\(...)\CongesView.h(201) : see reference to class template instantiation 'event::MemberEventHandler<R,ARG>' being compiled
with
[
R=CCongesView,
ARG=const CacheConges &
]
Ce qu'en dit M$ : http://msdn.microsoft.com/en-us/libr...a3(VS.80).aspx

Une partie du code du template (pas de pragma pack nulle part dans cette petite lib) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
template <typename R, typename ARG = EventArg>
class MemberEventHandler : public EventHandlerBase<ARG>
{
public:
  typedef void (R::*MemHandlerFun)( ARG );
 
private:
  MemHandlerFun handler_;
  R & receiver_;
};
Une partie du code utilisant le template (pas de pragma pack la non plus) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
class CongesView: public CFormView
{
};
 
class CCongesView : public CongesView, public SaveE0, public LoadE0, public Description0
{
  event::MemberEventHandler<CCongesView, CacheConges const &> CacheCongesModifiedEventHandler;
};
D'où vient ce warning et comment le virer ?