Ich habe ein seltsames Verhalten (in meinen Augen) von vector :: emplace_back() in gcc (Version 6.3.1) festgestellt. Implizit wird ein Typ auf einen anderen Typ konvertiert, obwohl der Konvertierungsoperator als explizit deklariert wurde.Implizite Konvertierung für expliziten Operator
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;
}
Ist es ein Fehler oder eine Funktion?
'emplace_back' baut sich explizit aus dem angegebenen Parameter. – Jarod42
Sie würden jedoch mit 'push_back' einen Fehler bekommen. – Jarod42