以下の最小限の例を考えてみましょう。
#include<utility>
struct S { };
int main() {
S s;
std::move(s) = S{};
}
エラーなしでコンパイルされます。
代わりに非クラス型を使用すると、エラーが発生します。
例として、以下のコードはコンパイルされません。
#include<utility>
int main() {
int i;
std::move(i) = 42;
}
列挙型、スコープ付き列挙型などでも同じことが起こります。
エラー(GCCから)は次のとおりです。
xvalue (右辺値参照) を左辺値として使用する
この背後にある理論的根拠は何ですか?
それは正しいと思いますが、クラス以外のすべてのタイプでそれを行うことができる理由を理解したいと思います。