This solves your problem:
template<class T>
std::decay_t<T> copy_of(T&& t){
return std::forward<T>(t);
}
template<class T, std::size_t N>
void copy_of(T(&)[N])=delete;
Then:
for(auto&& x:copy_of(a().value()))
copy_of , rvalue, for(:).
value_or_run(T&&, F&&f), , . F , , throw, T a T&&.
, value_or.
optional emplace value_or - , , , .value_or( throw_if_empty{} ), throw_if_empty throw_if_empty, .