テンポラリデータのポインタを引数にするときは下みたいにconstにしてやらないと「taking address of temporary array」と言われてしまう。テンポラリデータじゃ戻ってからのアクセス手段がないので値を書き込んでも使えないからね。しかし、コンストラクタのメンバを初期化するところでテンポラリデータのポインタを食わせると...
magMax((const double[]){ MAXFLOAT, MAXFLOAT, MAXFLOAT }), //OK
これは通る。が、
magMax((const double[]){ -MAXFLOAT, MAXFLOAT, MAXFLOAT }), //NG
これは「taking address of temporary array」で通らない。違いは単項の「-」だけ。しかし、
magMax((const double[]){ 0-MAXFLOAT, MAXFLOAT, MAXFLOAT }), //OK
と単項ではない「-」だと通る。上のコードは3つともconstなテンポラリデータのポインタを食わせているのに。
...わけがわからないよ。
とは言え、MAXFLOATはstatic const floatなのでその辺が関係あるのかもしれないし、C++の推奨に反してマクロで与えてやるとまた違った結果になる可能性がある。