考虑以下代码:
#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 编译它,只是警告未使用的变量。
然而,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 = ...
编译正常。s3 = ...
main()
这是 MSVC 中的错误,还是我在这里错过了一些基本的东西?