Code: Select all
struct copy_only
{
copy_only() = default;
copy_only(const copy_only&) = default;
copy_only& operator=(const copy_only&) = default;
copy_only(copy_only&&) = delete;
copy_only& operator=(copy_only&&) = delete;
~copy_only() = default;
};
std::vector v;
copy_only c{};
v.push_back(c);
< /code>
Auf MSVC erhalten wir den Fehler: < /p>
Fehler C2280: 'Copy_Only :: Copy_Only (Copy_only &&)': Versuch, auf eine gelöschte Funktion zu verweisen. push_back (const &)
HINWEIS: Beim Kompilieren von Klassenvorlagen -Mitgliedsfunktionen 'void std :: vector : '_Ty & std :: vector :: _ emplace_one_at_back (const _ty &)' kompiliert < /p>
< /blockquote>
Dies kompiliert mit GCC und Clang. Ist dies nur ein massiver MSVC -Compiler -Fehler im einfachsten Vektorbeispiel? Oder gibt es eine Standard -Sache, die diese Verwendung verhindern würde, die GCC und Clang nur überlegen?
Live -Beispiel.