Rv-refとconst Lv-ref
一時オブジェクトへの参照を受けるとき、C++03だとconst T &を使っていると思います。
が、C++0xではT &&が使えることもあってstd::forwardとかstd::moveがいい感じに動いているのですが、C++03でRv-refとconst Lv-refをSFINAEで判別したいってことをいましていて、何かいいアイディアが有ったらぜひ教えてもらいたいです。
つまり
template < typename T > undefined func( ... /* hogehoge */ ) { cout << "Rv-ref" << endl; } template < typename T > undefined func( ... /* fugafuga */ ) { cout << "const Lv-ref" << endl; } S s; func< S >( s ); // => const Lv-ref func< S >( S() ); // => Rv-ref
まぁ何に使うかって言うとBoost.Moveをより完璧なものにとか企んでるわけです。対象の性質上、参照のみで解決したいわけです。コピーとか無しね。
だめぽ。。。。