C++ 11 以前だと 'enum' is not a class or namespace error2020年10月13日 12時37分23秒

'enum' is not a class or namespace error は列挙型の名前を含めて指定したときに Solaris コンパイラが表示するエラー。C++11 からは列挙型の型名も名前をつけることが出来るようになった。

clang だともう少し分かりやすいエラーを表示してくれる。

% cat enum.cpp

enum Color
{
    green,
    yellow,
    red,
};

Color c = Color::green;

こちらが clang でのエラー。
% c++ -std=c++03 -c enum.cpp -o a.out
enum.cpp:8:11: warning: use of enumeration in a nested name specifier is
a C++11 extension [-Wc++11-extensions]
Color c = Color::green;
% c++ -std=c++11 -c enum.cpp -o a.out
C++11 に変えるとコンパイルできる。

clang だともう少し分かりやすいエラーを表示してくれる。

代入の右辺値から Color を落してもコンパイルする。

% cat enum.cpp

enum Color
{
    green,
    yellow,
    red,
};

Color c = green;
% c++ -std=c++03 -c enum.cpp -o a.out
%