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
}
내가 제공하는 설명은 컴파일러가 법적으로 템플릿 확장을 표현할 수있는 방법이 없다는 것, 그러나 그 이유보다 내 직관이다. 코드가 컴파일되지 않아야하는 이유에 대한 확실한 설명이 있습니까?
@ DavidRodríguez-dribeas : 문제는 이것이 허용되지 않는 이유로 C++ 11 초안 표준을보고 있었고 찾을 수 없었습니다. 그러나 컴파일러를 C++ 11 모드가 아닌 기본 모드로 사용하고있었습니다. 컴파일러에 C++ 11 스위치를 전달하면 코드가 컴파일됩니다. – jxh