いろいろ試したけれど結局だめぽ.とりあえず,この先同じ誤りでまた時間をつぶすことがないように,メモだけしておく.
const参照で浮動小数値を捕捉するクラス+ETな実装をやってみたけれど,結局コンパイル時に評価される「かもしれない」程度のものにここまでやる必要もないなということでやめる.というか,言語仕様の暗い片隅にぶち当たりまくり・・・.
template<double const &value> struct float_constant { typedef float_constant<value> this_type; // VC++7.1でコンパイルエラー:valueがcompile-time evaluatableでない static double eval(){ return value; } }; float_constant<3.14> pi; float_constant<2.718> e; pi.eval(); // VC++7.1でリンカエラー:関数名が重複 e.eval(); // 同上
上のも下のも良く分からない.上のは何に文句言われているのかすら分からん.あるいはreference to referenceに文句言われているんだろうか.下のはマングリングで同じ名前が振られている様子.わけ分からん.仕様書引っ張れば何か出てくるのかもしれないけれどもはやそこまでやろうという気も起きない.
参照の代わりに外部リンケージ持った定数へのポインタ持てば良いのだろうけれど,そんなことするなら最適化可能なdouble変数を単にtag付けすりゃええだけやん,っていう.