이 문제를 파악하는 데 좋은 시간이 걸렸습니다. 다음 코드구조체는 메서드 본문 내에서 선언 할 수 있지만 멤버 필드 초기화자를 포함하지 않는 경우에만 선언 할 수 있습니다. 컴파일러 버그인가요?
class Test {
public:
void method();
int _member;
};
void Test::method()
{
struct S {
int s = 0; // same with int s {0};
};
_member;
}
int main(int argc, const char* argv [])
{
return 0;
}
은 컴파일 오류 생성합니다 :
1>error C2327: 'Test::_member' : is not a type name, static, or enumerator
1>error C2065: '_member' : undeclared identifier
을 그리고 오류가 최대한 빨리 int s;
와 int s = 0;
교체로 도망 간다.
이것은 MSVC 2013에서만 발생하며 2015는 발생하지 않습니다. 저는 컴파일러 버그라고 확신합니다.하지만 C++과 관련이없는 익숙하지 않은 C++ 언어가 아닌지 확인하고 싶습니다. 및 C++ 14).
이것은 G ++ - 5.3.0에서도 잘 컴파일됩니다. –
버그처럼 보입니다. g ++ 및 clang 모두 제대로 컴파일되고 MSVS 2013은 C++ 11에 대한 최상의 지원을 제공하지 못했습니다. – NathanOliver
내가 알 수있는 것부터, MSVC 2013은 비 정적 멤버 초기화를 지원하기로되어 있습니다. 하지만 저는 중괄호 초기화를 사용한 예제 만 보입니다. 'int {0};을 시도 했습니까? –