C++相談室 part44
■ このスレッドは過去ログ倉庫に格納されています
0480デフォルトの名無しさん
2005/10/29(土) 02:08:27出させてください。
あるソフトのバグ?を追求している過程で、問題を純化していったら
以下のC++コードの合法性が焦点となることがわかったのですが、規格書
見てもよくわかりません。誰か、これの規格合致・違反・未定義性を
指摘できませんか?
<規格合致か違反か?>
struct foo {} とした場合、foo::foo としてその型(struct foo)を
表記してよい(foo でできるのは当然だが、foo::foo はありか?)
別の見方をすると
namespace foo { void hi(); }
class foo { static void hi(); }
があるとき、両方の hi() が共存することは可能か?それともエラーか?
どのコンパイラで通るって話ではなく(g++ で foo::hi() と
foo::foo::hi() で共存するのは確認済)、規格書の第何項の
どういう解釈によって合致・違反と定まるのか、という点で知りたいです。
そうじゃないと単なるコンパイラのローカル拡張とも思えるので。
規格上はクラス名は名前空間定義とほぼ等価なのだが、じゃあ
それなら上の foo::foo って foo class-scope の中の foo という
解釈になって、それは型名ではなくコンストラクタではないのかとか、
g++ が通しても本当に正しいのかちょっと悩んでます。
■ このスレッドは過去ログ倉庫に格納されています