§20.2.4 [declval]
なぜ '宣言'は 'T &&'ではなく、 'add_rvalue_reference <T> :: type'で指定されていますか?
template <class T>
typename add_rvalue_reference<T>::type declval() noexcept; // as unevaluated operand
なぜここadd_rvalue_reference
を使うのか? add_rvalue_reference
上§20.9.7.2 [meta.trans.ref]
から
:
T
もし名前オブジェクトまたは関数型のその後type
typedefのメンバーがT&&
に名前を付けるものとします。それ以外の場合は、type
の名前はT
となります。 [注:このルールは、参照縮退(8.3.2)のセマンティクスを反映しています。たとえば、タイプT
のタイプがT1&
の場合、タイプadd_rvalue_reference<T>::type
は正の値ではありません。 末端ノートは]add_rvalue_reference
以来
は、なぜだけではなく、次のようなT&&
を使用とにかく崩壊の参照を反映することを意図していますか?
template<class T>
T&& declval();
何が問題になる可能性がありますか? 2つのバージョンの違いは何ですか?
「どうして間違っていますか?」アヒル! –
@ LightnessRacesinOrbit:Err ..何?ちょうど私が何かを見落としたから-1を得ていますか?面白いもの... – Xeo
@ライトネス今_that_は無意味です。 –