Verhinderung der Verengung der Konvertierung bei Verwendung von std :: initializer_list
#include <iostream>
struct X {
X(std::initializer_list<int> list) { std::cout << "list" << std::endl; }
X(float f) { std::cout << "float" << std::endl; }
};
int main() {
int x { 1.0f };
X a(1); // float (implicit conversion)
X b{1}; // list
X c(1.0f); // float
X d{1.0f}; // list (narrowing conversion) ARG!!!
// warning: narrowing conversion of '1.0e+0f' from 'float' to 'int'
// inside { } [-Wnarrowing]
}
Gibt es eine andere Möglichkeit zum Entfernenstd::initializer_list
aus einer Überladungsliste (d. h. die Nichtlisten-Ctoren günstiger zu machen), anstatt die () -Initialisierung zu verwenden, oder zumindest zu verhindern, dass eine Verengungskonvertierung stattfindet (abgesehen davon, dass Warnung in Fehler umgewandelt wird)?
Ich habe benutzthttp://coliru.stacked-crooked.com/ Compiler, der GCC 4.8 verwendet.