Тип POD с конструкторами, но без агрегированной инициализации
Я запутался о типах POD в C++, у меня есть эти struct HSV
а также struct RGB
который представляет собой совокупность значений для построения цвета:
struct HSV
{
int hue;
int saturation;
int value;
};
struct RGB
{
// RGB(void) = default;
// RGB(HSV const& hsv) { };
int red;
int green;
int blue;
};
Я могу инициализировать struct RGB
с C-подобной агрегатной инициализацией, например, так:
RGB a = {.red=55, .green=125};
Однако, когда я раскомментирую дополнительный конструктор для создания struct RGB
с struct HSV
и default
Редактор по умолчанию, агрегатная инициализация больше не работает
Это все еще скажет мне, что у меня есть ПОД на моих руках как бы то ни было:
std::cout << std::boolalpha;
std::cout << std::is_standard_layout<RGB>::value << '\n'; // true
std::cout << std::is_trivial<RGB>::value << '\n'; // true
std::cout << std::is_pod<RGB>::value << '\n'; // true
Могу ли я использовать агрегатную инициализацию в стиле C, имея конструктор преобразования, как у меня, или это невозможно?
РЕДАКТИРОВАТЬ: я только что уведомил, что это clang
расширение (и, возможно, также возможно с компилятором VS). Но мне все еще интересно, если это возможно, с clang
по крайней мере.