コンパイラのスプラッシュ画面は次のとおりです (バージョンなど)。
C:\Program Files\Microsoft Visual Studio 10.0\VC>cl.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
私は基本クラス(テンプレートです)を持っています。それは次のとおりです。
template <typename T>
class Base {
public:
Base<T> & operator = (const Base<T> &);
Base<T> & operator = (Base<T> &&);
};
私は、決して再実装しない派生クラスを持っていoperator =
ます。
私が次のことをした場合:
Derived<int> derived;
derived=Derived<int>();
operator =
左辺値を受け入れる は 2 行目で呼び出されます。
の定義に入りDerived<T>
、次を追加すると:
template <typename T>
Derived<T> & Derived<T>::operator = (Derived<T> && other) {
Base<T>::operator=(static_cast<Base<T> &&>(other));
return *this;
}
operator =
右辺値を受け入れる が呼び出されます。
operator =
左辺値を取る を (ほぼ同じ方法で)実装しても、この動作は持続します。
より良い言い回しがない場合: 何を与えるか?
私は C++ を誤解していますか、それとも本来の動作方法ではないのでしょうか?