Код в этом файле GitHub использует синтаксис "объявления" переменной C++, с которым я не знаком:
std::unique_ptr<CRecentFileList> {m_pRecentFileList} = std::make_unique<CRecentFileList>(...
(m_pRecentFileList
объявляется в суперклассе).
Что это означает, когда вы завертываете объявление переменной в фигурных скобках? (не список инициализаторов)
Я извлек минимальный тестовый пример, который компилирует:
class foo {
int* p;
void f(){
std::unique_ptr<int> {p} = std::make_unique<int>(1);
}
};
Изменение int* p
на std::unique_ptr<int> p
создает ошибку компиляции из-за unique_ptr(const unique_ptr&) = delete;
Это заставляет меня думать, что сжатая декларация присваивает переменной внешнего вида с тем же именем. Я попытался создать тестовую программу, но она не скомпилирована:
int main(){
int x;
int {x} = 1;
}
error: using temporary as lvalue [-fpermissive]