Erreur du compilateur C3849
L’appel de style de fonction sur une expression de type 'type' perdrait des qualificateurs const et/ou volatiles pour toutes les surcharges d’opérateur disponibles de nombre
Une variable avec un type const-volatile spécifié peut uniquement appeler des fonctions membres définies avec des qualifications const-volatiles identiques ou supérieures.
Pour corriger cette erreur, fournissez une fonction membre appropriée. Vous ne pouvez pas exécuter une conversion sur un objet qualifié const ou volatile lorsque la conversion entraîne une perte de qualification. Vous pouvez obtenir des qualificateurs, mais vous ne pouvez pas perdre de qualificateurs dans une conversion.
Les exemples suivants génèrent l’erreur C3849 :
// C3849.cpp
void glbFunc3(int i, char c)
{
i;
}
typedef void (* pFunc3)(int, char);
void glbFunc2(int i)
{
i;
}
typedef void (* pFunc2)(int);
void glbFunc1()
{
}
typedef void (* pFunc1)();
struct S4
{
operator ()(int i)
{
i;
}
operator pFunc1() const
{
return &glbFunc1;
}
operator pFunc2() volatile
{
return &glbFunc2;
}
operator pFunc3()
{
return &glbFunc3;
}
// operator pFunc1() const volatile
// {
// return &glbFunc1;
// }
};
int main()
{
// Cannot call any of the 4 overloads of "operator ()(.....)" and
// "operator pFunc()" because none is declared as "const volatile"
const volatile S4 s4; // can only call cv member functions of S4
s4(); // C3849 to resolve, uncomment member function
}