考慮下面的代碼:不一致的行爲與GCC與的sizeof
#include <cstddef>
class A
{
public:
struct B
{
int M;
};
static void StaticFunc();
};
void A::StaticFunc()
{
const std::size_t s0 = sizeof(::A::B::M);
const std::size_t s1 = sizeof(A::B::M);
const std::size_t s2 = sizeof(B::M);
}
int main()
{
const std::size_t s3 = sizeof(A::B::M);
return 0;
}
GCC compiles it,只是警告對未使用的變量。然而
的Visual C++ 2015失敗,並對其進行編譯:
error C2326: 'void A::StaticFunc(void)': function cannot access 'A::B::M'
在線路
const std::size_t s0 = sizeof(::A::B::M);
const std::size_t s1 = sizeof(A::B::M);
在StaticFunc()
。
另一行s2 = ...
和在main()
編譯正常。
這是MSVC中的錯誤,還是我錯過了一些基本的東西?
我看不出爲什麼它不應該工作。所以我會在一定程度上相信這是一個VS錯誤。 – bolov
由於這些編譯器和編譯器問題在這裏很受歡迎,我們來打開池: – bolov
A)它是一個VS bug – bolov