Bonjour,
Sur un exemple aussi simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
#include <iostream>
#include <string>
#include <boost/variant.hpp>
 
struct mon_visiteur :boost::static_visitor<void>
{
   void operator()(int i_)const
   {
      std::cout<<"un entier de valeur "<<i_<<std::endl;
   }
   void operator()(std::string str_)const
   {
      std::cout<<"une chaine de valeur "<<str_<<std::endl;
   }
};
 
int main()
{
   boost::variant<int,std::string> un_entier_ou_une_chaine;
   un_entier_ou_une_chaine=1;
   boost::apply_visitor(mon_visiteur(),un_entier_ou_une_chaine);
   un_entier_ou_une_chaine = "tutu";
   boost::apply_visitor(mon_visiteur(),un_entier_ou_une_chaine);
 
   return 0;
}
J'ai 6 beaux warning avec Visual Express :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
warning C4512: 'boost::detail::variant::direct_assigner<T>' : assignment operator could not be generated
warning C4512: 'boost::detail::variant::invoke_visitor<Visitor>' : assignment operator could not be generated
warning C4512: 'boost::detail::variant::direct_assigner<T>' : assignment operator could not be generated
warning C4512: 'boost::variant<T0_,T1>::assigner' : assignment operator could not be generated
warning C4512: 'boost::detail::variant::invoke_visitor<Visitor>' : assignment operator could not be generated
warning C4512: 'boost::detail::variant::invoke_visitor<Visitor>' : assignment operator could not be generated
Visiblement, il ne sait pas construire l'opérateur d'assignement par défaut (du moins, si mon anglais n'est pas trop bancal).

Question : Qu'est-ce que cela peut avoir comme conséquence ?
Question bis: comment je peux virer ces warning (à part un brutal pragma disable).

Il ne me semble rien avoir vu à ce sujet sur le site de boost.