Skip to content
2009/05/11 / highmt

VC9のfunction-try-blockでコンパイルエラー

ひさしぶりに古いC++のコードをひっぱりだしてきてVS2008でビルドすると、

error C2590: ベース/メンバ初期化子リストを持つことができるのはコンストラクタだけです。   

などといわれてしまった。

class X
{
public:
  void f()
  try
  {
  }
  catch (...)
  {
  }
};

といったコードが怒られてしまうらしい。VS2003のころは通ってたはずなんだけど。
g++4.3.3でも通るみたいだし。

クラス定義の外では通るみたい。

void X::f()
try
{
}
catch (...)
{
}

クラス定義の中でもコンストラクタは大丈夫みたい。

class X
{
  int m;
public:
  X()
  try : m(0)
  {
  }
  catch (...)
  {
  }
};
もともとの意図を考えれば、コンストラクタ以外でこの構文を使わないほうがいいのかもしれない。
広告
%d人のブロガーが「いいね」をつけました。