>>438
>>442
ありがとうございます。
とりあえず、以下のようにしました。

// VC++7.1 のエラー回避用
template< typename T > struct bsizeof
{
 static size_t const value = sizeof(T) * CHAR_BIT;
};

// inline bitset< sizeof(T) * CHAR_BIT * N > bitset_from_vector( ... )
// と記述するとエラーする。どうして?
template< typename T, size_t N >
inline bitset< bsizeof<T>::value * N > bitset_from_vector( T (&x)[N] )
{
 typedef bitset< bsizeof<T>::value * N > bset_t;

 bset_t b;
 size_t i = N;
 while( i != 0 )
  ( b << bsizeof<T>::value ) |= bset_t( x[--i] );
 return b;
}

いつもオーダーで混乱するので間違ってたら指摘してください。