У меня есть следующий код:
struct A {//<-- Third party library class
A(){};
A(const A&) = delete;
void init(){};
int i;
};
int f(){
static A a = []{
A res;
res.init();
return res;
}();
return a.i;
}
посмотреть вживую: http://coliru.stacked -crooked.com / a / a5c5912bd79053c3
А при компиляции выдает следующую ошибку:
g++ -std=c++17 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
main.cpp: In lambda function:
main.cpp:12:12: error: use of deleted function 'A::A(const A&)'
return res;
^~~
main.cpp:4:3: note: declared here
A(const A&) = delete;
^
Я знаю, что мог бы обернуть это в другой struct
и инициализировать в этом конструкторе , но это только кажется несколько утомительным.
Используя c ++ 17 , есть ли у нас «аккуратный» способ обойти эту «проблему»?
Любое решение должно работать одинаково хорошо для статической переменной в функции