here이 도입 된 C++ 11 기반 열거 비트 세트를 고려했습니다. 나는 몇 가지 예제 프로그램을 함께했다 :프로그램이 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;
}
이 프로그램은 clang++ -std=c++11 -o main main.cc
를 통해 ++ (연타 버전 3.8.1 (태그/RELEASE_381/최종))를 연타를 사용하여 잘 컴파일합니다. 그러나 g ++ (g ++ (GCC) 6.2.1 20160830)를 g++ -std=c++11 -o main main.cc
을 통해 대신 사용하면 컴파일러는 결국 시스템 메모리를 소모합니다. 이 문제는 g ++에서 발생합니까? 아니면이 코드가 어떻게 표준을 준수하지 않습니까?
'표준 : 비트 세트 <표준 : : numeric_limits :: 최대()> '즉, 하나의 큰 비트 세트입니다. –
Borgleader
g ++ 및 clang이 다른 기본 유형을 사용하는지 궁금합니다. – NathanOliver
@NathanOliver AFAIK enum 클래스의 기본 기본 형식은 32 비트 int입니까? (또는 기본 wtv가 될 수없는 일반 열거 형과 달리 열거 형 클래스를 전달할 수 있기 때문에 표준에 지정된 값이 있습니다.) – Borgleader