const 参照をエミュレートするクラステンプレートが実装可能か?つまり以下のようなクラステンプレート
template<class T>
class const_reference
{
?????
};があったとして,
int i;
double d;
const_reference<int> rci1(i); // i への const 参照として振舞う
const_reference<int> rci2(1); // 一時オブジェクトの 1 は rci の寿命まで延命される
const_reference<double> rcd1(d); // int -> double への変換後,変換によって生じた
// 一時オブジェクトへの const 参照となり,
// かつその一時オブジェクトの寿命を延命
const_reference<double> rcd2(2); // 上と同様
struct Base{};
struct Derived : public Base{};
Derived drv;
const_reference<Base> rcb(drv); // drv への const 参照として振舞う上記のように振舞うように実装することが可能かどうか,という問題.実際に捕捉している参照へのアクセスは(どうせ C++ ではスマートリファレンスは実装できないので)スマートポインタと同じアクセス方法(operator*, operator->)で妥協するものとする.
#あ,これ自分が本来想定していた問題より相当難しいかも知れない…….っつーか,これ本当に実装できるのか?
#あ〜,これ無理.これが可能になるためには任意の型に対して右辺値と const 左辺値が識別できないといけないけれど,それは無理.とゆ〜か,それができるなら Move Semantics バンバン書き倒すっちゅーねん.
#あれ?ということは const 参照の初期化では,少なくともコンパイラが右辺値と const 左辺値を識別する能力が微妙に露見しているわけだから,その情報を何とか捕捉できるような TMP の技法があれば……まぁ無理か.
#おろ?おろろ?いや,やっぱ const 参照エミュレーションできるんじゃ??
#できた…….