2016-12-08 11 views
4

std::list<bool>は、同様の狂気によって、std::vector<bool>のような明示的な特殊化がありますか?std :: listの実装<bool>

std::vector<bool>唯一のC++標準ライブラリのコンテナはこのように苦しんでいますか?

特殊化を検出するために使用できるtraitsの種類はありますか?

+0

いいえ、 'std :: list'には特化がありません。 –

+0

ありがとうございます。しかし、答えとしてそれを置くことを自由に感じてください。また –

+0

、検出用として、同様の質問は:http://stackoverflow.com/questions/16337610/how-to-know-if-a-type-is-a-specialization-of-stdvectorは –

答えて

5

標準で見られるように、std::vector<bool>には、その実装を指示する独自の段落があります。 std::listが1つあるという要件はありません。つまり、実装が許可されていないわけではありません。ではなく、があります。そして、私が知る限り、std::vectorは、boolの特化が必要な唯一の容器です。

+0

ありがとう、私はこれをupvoteよ。しかし、私は実装が1つを持っていた場合、それは専門化を持たないものとまったく同じ規則に従わなければならないと思いますか? –

+1

@XavierImbs正しい。 –

+3

@XavierImbsそうですが、標準的な要件は、 'std :: list 'の明示的な特殊化はおそらく役に立たないことを意味します。標準的な要件では、複数のビットを1バイトにパッキングすることは暗黙的に禁止されています。それは 'のstd ::ベクトル'のための要件は、他の 'のstd ::ベクトル' sのものとは異なっている理由です:それは、このようなパッキングを可能にするために、具体的です。 – hvd

関連する問題