Code: Select all
struct nonmoveable {
nonmoveable(const nonmoveable&) = delete;
nonmoveable(nonmoveable&&) = delete;
nonmoveable& operator=(const nonmoveable&) = delete;
nonmoveable& operator=(nonmoveable&&) = delete;
};
int main() {
nonmoveable x = {};
auto y = nonmoveable{};
}
< /code>
Auf Godbolt laufen. Changing auto
(10): error C2280: 'nonmoveable::nonmoveable(nonmoveable &&)': attempting to reference a deleted function
(3): note: see declaration of 'nonmoveable::nonmoveable'
(3): note: 'nicht movable :: nicht movable (nicht movable &&)': Funktion wurde ausdrücklich gelöscht
< /blockquote>
Wer ist korrekt nach dem Standard? Reine Compiler -Optimierung unter Verwendung der Regel "als ob" wäre eindeutig verboten, da das naiv äquivalente Auto y = std :: move (x); nicht kompilieren kann.