4

7.3.3項。C++2003規格の

クラスメンバーに宣言を使用することは、メンバー宣言でなければなりません。

これは、次の場合に構文エラーが発生することを意味します。

struct S1
{
    static int var1;
};

using S1::var1;

以下は正常にコンパイルされますが:

namespace N2
{
    int var2;
}

using N2::var2;

誰かがその背後にある理論的根拠(もしあれば)を知っていますか?

さらに、この標準は、構造体の静的データメンバーを使用した明示的な例を示し、構文エラーを引き起こす必要があることを示しています。MS C++はこのエラーを出します:

cpptest1.cxx(9):エラーC2885:'S1 :: var1':非クラススコープでの有効なusing宣言ではありません

なぜこれを禁止すべきなのかはまだはっきりしていません。

4

1 に答える 1

0

それが機能しない理由は、単に標準がそれを禁止しているからです。sこの例では特に注意してください。

ここに画像の説明を入力してください

回避策として、次のように言うことができます。

auto& var = S1::var;

標準(したがってすべてのコンパイラ)をより複雑にして、便利な回避策がある異常なケースを処理することは、費用便益テストに合格しません。

于 2012-06-20T19:29:42.697 に答える