にゃははー

はへらー

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をより完璧なものにとか企んでるわけです。対象の性質上、参照のみで解決したいわけです。コピーとか無しね。

だめぽ。。。。