使用上の注意

Digital Mars C++ 8.42nで動かすときの注意

Digital Mars C++ 8.42nで、独自クラスを文字型として使用した場合、コンパイルエラーが発生します。 原因を調べた結果、以下のように構造体メンバとしてクラスが存在した場合、その配列を初期化する際にエラーが発生するようです。

// 独自の文字型
class character
{
public:
	character(const char ch = 0) { m_ch = ch; }
	bool operator==(const character &rhs) const { return m_ch == rhs.m_ch; }
	bool operator< (const character &rhs) const { return m_ch <  rhs.m_ch; }

	character operator+(const int value) const { return character(static_cast<char>(m_ch + value)); }

private:
	char m_ch;
};

// 構造体メンバに含まれている状態で配列を初期化するとエラーが起きる
const struct
{
	character ch;
}
values[] =
{
	{character('a')}
};

この解決法は現在調査中です。 とりあえず、現時点ではDigital Mars C++では独自クラスを文字型として使わないでください。

構造体を使わずにメンバを別々に宣言すればとりあえず動作するようですが、可読性が低いのとコードが美しくないので別の方法を模索中です。