이 고려 선언 된 following code :decltype : 오류 "참조"멤버 이전에 사용
struct test {
auto func() -> decltype(data) {} // ERROR
int data;
};
int main() {
test t;
t.func();
}
그것은 다음과 같은 오류 제공 : 내가 위에서 data
를 배치하면, 그러나
main.cpp:2:29: error: 'data' was not declared in this scope
auto func() -> decltype(data) {}
을 func()
, 오류 없음 (live code) :
struct test {
int data;
auto func() -> decltype(data) {}
};
...
그래서 내 질문에, decltype
은 (선언에서 정의가 아닌 decltype
이 사용 된 경우) 멤버를 고려하지 않은 이유는 무엇입니까? 또한 언어 표준의 향후 반복에서이 동작에 변경 사항이 있는지 알고 싶습니다.
내가 다르게 동작하는
decltype
을 기대했기 때문에 나는이 부탁 해요 있습니다. 코딩 규칙은 클래스 데이터 멤버를 클래스 함수 아래에 배치하는 것입니다. 확실히이 다른 행동은 내가 반원들을 어떻게 조직 할 것인지에 영향을 미친다. 내 코딩 규칙을 유지할 수있는 해결 방법을 제공 할 수 있다면 매우 감사 할 것입니다.
죄송합니다 - C++의 성격, C에서 상속 –
단순한'typedef '는'decltype'뿐만 아니라 [같은 행동] (http://coliru.stacked-crooked.com/view?id=8f959fbd70b0b7d44c21ff0d71967fd5-6f7ec8a47f20223a17b26973b6e13527)을 보여줍니다. 'typedef '를 멤버 함수 정의 위로 옮기면 분명히 문제가 해결 될 것입니다. – Praetorian
@Praetorian 그래서 내재적 인 문제입니다 ... 너무 나쁩니다. –