`auto x = nicht movable {};` abgelehnt von MSVC, aber von GCC und Klang zugelassen

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: `auto x = nicht movable {};` abgelehnt von MSVC, aber von GCC und Klang zugelassen

by Anonymous » 02 Mar 2025, 15:09

Ich versuche, von T T {...}; Konstruktion zu automatisch t = t {...}; zu bewegen, um es mit Funktionsaufrufen wie auto p = std :: make_unique zu machen.

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
to nonmoveable results in the same error:

(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.

Top