Hej czy ktoś wie czemu std::string da się zainicjalizować brace initializer listą jak to nie jest POD:
#include <iostream>
struct X
{
X(){};
int a;
double b;
int c;
};
int main()
{
std::cout << "C++17" << std::endl;
//std::string x = {"sasasa"}; //to się da a przecież string też nie jest podem
X x = {1,2,3}; //tego sie nie da bo to nie POD bo dałem user declared ctor
//X x[2] = {{1,2.0,3}, {4,5.0,6}}; //tego sie nie da bo to nie POD bo dałem user declared ctor
std::cout << sizeof(X) << std::endl;
return 0;
}
Może w implementacji stringa dali kontruktor implicit a na liście argumentów ctora initializer list i stąd działa, ale jakby tego nie bylo to by też wystąpił błąd kompilacji? Jak dam tak to już działa:
struct X
{
X(std::initializer_list<int> x){};
int a;
int b;
int c;
};