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

Programme in C++. Entwicklerforum
Anonymous
 `auto x = nicht movable {};` abgelehnt von MSVC, aber von GCC und Klang zugelassen

Post by Anonymous »

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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post