Как я могу использовать `.value ()` on `std :: weder ` где `t` t` тип только для перемещения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу использовать `.value ()` on `std :: weder ` где `t` t` тип только для перемещения?

Сообщение Anonymous »

Следующий код: < /p>

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std::literals;

class Resource {

Resource() { /* some setup, might raise */ }

public:
static std::expected tryCreate() noexcept {
try {
return Resource();
} catch (const std::runtime_error& exc) {
return std::unexpected(exc.what());
}
}
static const Resource create() noexcept {
while (true) {
const auto resource{Resource::tryCreate()};
if (resource.has_value()) return resource.value();  // 
Я не вижу никаких объяснений о CPPREEFEREFERE, что типы перемещения не допускаются, и я не сразу не могу найти кого-то еще, что у него есть подобная проблема при поиске в Интернете, (Хотя я все еще новичок в этом, так что, вероятно, мой C ++ Google-Fu неадекватен).  Я думаю, что это может быть что-то связано с "копией Elision", но на самом деле я весьма потерян. Код>?  Если это так, как я могу изменить свой пример кода так, чтобы он работал (без определения конструкторов копирования)? m переживает аналогичные с GCC 14.2.1, опять же с -std = c ++ 23.  

Подробнее здесь: [url]https://stackoverflow.com/questions/79386407/how-can-i-use-value-on-stdexpectedt-e-where-t-is-a-move-only-type[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»