Тип 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 по крайней мере.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector