yohhoyの日記

技術的メモをしていきたい日記

anachronistic old-style base class initializer

gcc(g++)が出力する不思議なエラーメッセージについて。役に立たない昔話。

本記事の内容はStack Overflowで見つけた質問と回答に基づく。

下記コードはC++言語仕様には違反(ill-formed)しているが、gcc/-fpermissiveオプションでコンパイル可能。

struct B {
  B(int) {}
};

struct D : B {
  D(int n) : (n) {}  // ??
};

gcc 5.1.0のエラーメッセージ:(anachronistic=時代錯誤の)

In constructor 'D::D(int)':
error: anachronistic old-style base class initializer [-fpermissive]
   D(int n) : (n) {}

プログラミング言語C++の前身、"C with Classes" 時代のコンパイラ*1Cfrontにおける基底クラス初期化子記法。1989年の "C++ 2.0" で多重継承がサポートされるまで有効な文法であった。(なお "Annotated C++ Reference Manual" 通称ARMは翌1990年刊行、最初の標準規格C++98は1998年発行。)

関連URL

*1:C言語ソースコードを出力するプログラムのため、コンパイラというよりトランスレータという表現の方が正確か。