const 参照エミュレーション

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 参照エミュレーションできるんじゃ??
#できた…….