えーっと、
MultiValue<T> V={A,B,C};
的な初期化がしたいのですよ。
で、std::arrayをみて、コンストラクタを書かずに、対象の変数をパブリックにすれば、
言語の標準機能で初期化できることがわかりました。
しかし、クラスの隠蔽の観点からそういうパブリックな変数は意にそぐわないと思います。
そこで、パブリックにする代わりに、プリプロセッサで予測が難しい文字列に置換することにしました。
で、defineしたものを使い終わったらけして、隠蔽を図るまではアリだと思うのですが、
その後の使用においてもパブリックなフィールドに手をつけられないようにするべきでしょうか。それが@に置換なんですけど。
そもそも、どの程度のプロテクトをかければ正常な運用の上で不具合が起こらないでしょうか??

vc10なんですけど、イニシャライザーリストさんがまだ来ないので困っています。