J'ai rencontré un comportement étrange (à mes yeux) de vecteur :: emplace_back() dans gcc (version 6.3.1). Il implicite implicitement un type à un autre même si l'opérateur de conversion déclaré comme explicite.Conversion implicite pour opérateur explicite
class A
{
public:
explicit A(double value) :
value{value}
{}
explicit operator double() const
{
return value;
}
private:
double value;
};
int main()
{
A a{0.0};
std::vector<double> values;
values.emplace_back(a); // <- no error here!
return 0;
}
Est-ce un bug ou une fonctionnalité?
'emplace_back' builds explicitement du paramètre donné. – Jarod42
Vous obtiendrez une erreur avec 'push_back' cependant. – Jarod42