2017-05-22 17 views
1

以下はVS2017で正常にコンパイル:非const非静的メンバーは、クラスのインスタンスなしでコンパイル時にアクセスできるのはなぜですか?

#include <type_traits> 

struct Foo 
{ 
    int bar; 
}; 

int main() 
{ 
    static_assert(std::is_same_v<decltype(Foo::bar), int>, "Foo::bar isn't an int"); 
    return 0; 
} 

はFoo ::バーのアクセスは、それがfooの静的メンバだと、コンパイル時に強制するべきではないでしょうか。テンプレートタイプの特定のメンバ変数を静的にしようとしている間、私はこれを見つけました。

答えて

5

decltype(Foo::bar)指定のメンバーFoo::barへのアクセスがない:それは単にFooのメンバー、コンパイラはbarから知っている情報 "のみの宣言のタイプのためのコンパイラを要求します。

これはsizeofの式に似ています。sizeof(Foo::bar)のインスタンスを持たずに、Fooのインスタンスを使用でき、コンパイラが正しい結果を生成します。

関連する問題