導入されたC++ 11ベースのenumビットセットはhereです。プログラムはclang++ -std=c++11 -o main main.cc
経由で打ち鳴らす++(打ち鳴らすバージョン3.8.1(タグ/ RELEASE_381 /最終))を使用して、うまくコンパイルプログラムはclang ++を使用してコンパイルしますが、g ++はRAMを使い果たして失敗します。
#include <bitset>
#include <type_traits>
#include <limits>
template <typename TENUM>
class FlagSet {
private:
using TUNDER = typename std::underlying_type<TENUM>::type;
std::bitset<std::numeric_limits<TUNDER>::max()> m_flags;
public:
FlagSet() = default;
FlagSet(const FlagSet& other) = default;
};
enum class Test
{
FIRST,
SECOND
};
int main(int argc, char *argv[])
{
FlagSet<Test> testFlags;
return 0;
}
:私はいくつかのサンプルプログラムを思い付きました。 しかし、代わりにg++ -std=c++11 -o main main.cc
経由でg ++(g ++(GCC)6.2.1 20160830)を使用すると、コンパイラは最終的にシステムメモリを使い果たします。これはg ++の問題ですか?またはこのコードは何とか標準に準拠していませんか?
'のstd ::ビットセット<はstd :: numeric_limitsの :: MAX()>'それは一つの大きなビットセットです。 –
Borgleader
g ++とclangが異なる基底型を使用しているのだろうかと思います。 – NathanOliver
@NathanOliver AFAIK enumクラスのデフォルトの基になる型は32ビットintですか? (または、デフォルトでは、通常の列挙型ではないenumクラスを宣言することができるので、標準で指定されているものがあります) – Borgleader