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

0 ответов

Другие вопросы по тегам