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
%

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2020/10/13/9305328/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。