次のコードを検討してください。
struct any
{
template <typename T>
operator T &&() const;
template <typename T>
operator T &() const;
};
int main()
{
int a = any{};
}
ここで、2番目の変換演算子は、過負荷の解決によって選択されます。どうして?
私の理解する限り、2つの演算子はそれぞれoperator int &&() const
とに推定されoperator int &() const
ます。どちらも実行可能な関数のセットに含まれています。[over.match.best]を読んでも、後者が優れている理由を理解するのに役立ちませんでした。
なぜ後者は前者よりも機能が優れているのですか?
template <typename T> operator T &&() const &&; template <typename T> operator T &() const &;
最初のものを呼び出すためにそれを取得します。