2015-10-30 8 views
6

std::bitset::sizeが非静的である理由を私はおそらく想像できません。サイズがconstexprになるのはずっと難しくなります。それは静的であれば、あなたがしなければならないだろう、すべてがなぜstd :: bitset :: sizeが非staticなのですか

BitsetType::size() 

だろうと機能のない犠牲はないだろうとき

template<int val> 
struct int_ 
{ 
    static const constexpr value = val; 
}; 

template<size_t size> 
auto getBitsetSizeIMPL(std::bitset<size>) 
{ 
    return int_<size>{}; 
} 

template<typename BitsetType> 
constexpr size_t getBitsetSize() 
{ 
    return decltype(getBitsetSizeIMPL(BitsetType{}))::value; 
} 

:あなたはこのような何かを記述する必要があります。

私には紛失しているという歴史的理由があるのですか、技術的な事実がありませんか?

+1

FWIWは、あなたが 'BitsetType {}サイズを行うことができます()'。 – cpplearner

+0

True!それについて考えなかった。それははるかに良いです。しかし、それでも静的にならない理由は何ですか? –

+0

'std :: array :: size'が静的でないのと同じ理由で、私は想像します。誰かが先週それについて尋ねていた。 –

答えて

1

ないconstexprstd::bitset::sizeの仮定が間違っています:。

std::size_t size() const; // until C++11 
constexpr std::size_t size(); // since C++11, until C++14 
constexpr std::size_t size() const; // since C++14) 
+0

しかし、それらを使うためには、constexprビットセットを持たなければなりません。静的ではありません。 –

+0

@RussellGreene:そして? –

+0

あなたは質問に答えていません。私はそれがconstexprであることを知っている。なぜ彼らがそのデザインの選択を選んだのか不思議です。 –

関連する問題