Продление срока службы инициализированной по умолчанию 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.