C++ 11 以前だと 'enum' is not a class or namespace error
2020-10-13


'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
%
[Solaris]
[C++]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット