Продление срока службы инициализированной по умолчанию const ref& в совокупности

Я знаю, что привязка значений prvalues ​​к переменным const ref продлит срок службы временных переменных. Теперь я подумал, что было бы умно иметьstruct optionsкоторый содержит поле const refB_options(который используется для инициализации подкласса в моем контексте). Поэтому, когда я копирую этот объект в класс, он будет занимать только одну ссылку вместо того, чтобы содержать все параметры подкласса. Я скомпилировал этот код в gcc, и он работает отлично:

Демо

      #include <cstdio>

struct B_options
{
    int a = 10;
};

struct options
{
    const B_options& b_cfg = {};
};

int main()
{
    options cfg = {};

    printf("b_cfg = %d", cfg.b_cfg.a);
}

Затем из любопытства я попытался скомпилировать его с помощью clang Trunk, и вылезла следующая ошибка:

      <source>:15:20: warning: sorry, lifetime extension of temporary created by aggregate initialization using default member initializer is not supported; lifetime of temporary will end at the end of the full-expression [-Wdangling]
    options cfg = {};
                   ^
<source>:10:22: note: initializing field 'b_cfg' with default member initializer
    const B_options& b_cfg = {};

Итак... это UB или просто что-то, чего Clang сейчас не может сделать? Я использую gcc, так что я мог бы жить с clang, просто не реализуя что-то, но мне не очень удобно отправляться на территорию UB.

0 ответов

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