2012-09-19 4 views
0

answering a different question 동안 다음 코드가 허용되지 않는 이유를 찾을 수 없습니다.템플릿에 로컬로 정의 된 유형을 사용할 수 있습니까?

template <typename F> void bar (F *f) { f->a = 0; } 

int main() { 
    struct Foo { int a; } f = { 3 }; 
    bar(&f);       // fail 
} 

내가 제공하는 설명은 컴파일러가 법적으로 템플릿 확장을 표현할 수있는 방법이 없다는 것, 그러나 그 이유보다 내 직관이다. 코드가 컴파일되지 않아야하는 이유에 대한 확실한 설명이 있습니까?

+0

@ DavidRodríguez-dribeas : 문제는 이것이 허용되지 않는 이유로 C++ 11 초안 표준을보고 있었고 찾을 수 없었습니다. 그러나 컴파일러를 C++ 11 모드가 아닌 기본 모드로 사용하고있었습니다. 컴파일러에 C++ 11 스위치를 전달하면 코드가 컴파일됩니다. – jxh

답변

6

C++ 03에는 명시 적으로 허용되지 않지만 C++ 11에는 법적 코드가 허용되지 않습니다.

제가 질문 한 이래로 표준이 변경되어 Using local classes with STL algorithms의 정확한 사본인지 확실하지 않습니다.

+0

고맙습니다, 데이빗. – jxh

관련 문제