Der folgende Code:
#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(); //
... weigert sich, mit dem Fehler zu kompilieren: < /p>
:25:42: error: call to deleted constructor of 'const Resource'
25 | if (resource.has_value()) return resource.value();
| ^~~~~~~~~~~~~~~~
:29:3: note: 'Resource' has been explicitly marked deleted here
29 | Resource(const Resource&) = delete;
| ^
1 error generated.
Compiler returned: 1
< /code>
Ich sehe keine Erläuterung zu Cppreference, dass nur Bewegungstypen nicht zulässig sind, und ich kann nicht sofort jemanden finden, der ein ähnliches Problem hat, während ich im Internet suchst. (Obwohl ich immer noch neu bin, ist es wahrscheinlich, dass mein C ++ Google-Fu unzureichend ist). Ich denke, es könnte etwas mit "Kopieelision" zu tun haben, aber ich bin wirklich ziemlich verloren. Code>? Wenn ja, wie kann ich meinen Beispielcode so ändern, dass er funktioniert (ohne Kopierkonstruktoren zu definieren)? M erleiden ähnlich wie GCC 14.2.1, wieder mit -Std = C ++ 23.
Wie kann ich `.value ()` on `std :: erwartet ` wo `t` ist ein nur Bewegungstyp? ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post