sign_bit for PowerPC

PowerPCも試してみました。
SourceForge.jpコンパイラファームのgcc2.95.2とgcc3.1だと、

sizeof(float) =4
sizeof(double) =8
sizeof(long double) =8

という環境なのですが、Boostのコンパイラステータスでconfig_infoテストの結果を見ると、

sizeof(float) =4
sizeof(double) =8
sizeof(long double) =16

となっていて、最近のバージョンではlong doubleのサイズが16バイトに変わっているようでした。16バイトのlong doubleにパディングがあるかどうかは確認できていません。
とはいえ、パディングはどうせ後ろに付くでしょうし、ビッグエンディアンなので符号ビットの位置は固定です。というわけで、型毎の場合分けもなく、

template<class T>
inline bool sign_bit_helper(T t, const boost::true_type&)
{
    return (*reinterpret_cast<boost::uint32_t*>(&t) & 0x80000000) != 0;
}

としました。16バイトlong doubleはテストできてませんが多分動くでしょう。