다음 코드는 엑스 코드에서 컴파일 오류가 발생하는암시 템플릿 매개 변수
template <typename T>
struct Foo
{
Foo(T Value)
{
}
};
int main()
{
Foo MyFoo(123);
return 0;
}
error: missing template arguments before 'MyFoo'
가 Foo MyFoo(123);
Foo<int> MyFoo(123);
에 대한 수정 문제를 변경,하지만하지 컴파일러는 적절한 알아낼 수있을 것 데이터 형식?
이것은 컴파일러 버그입니까? 아니면 암시 적 템플릿 매개 변수를 잘못 이해합니까?
Foo MyFoo(123);
이
MyFoo
위한 임시 공간을 할당하고, 알고하기 위해
MyFoo
의 완전한 유형을 알고 있어야합니다
,이 공간을 추론 할 수있다. –
생성자에 대한 호출 유형을 유추 할 수 있지만 저장 공간은 유추 할 수 없습니다. 변수를'Foo'로 정의하면'Foo'과'Foo '를 모두 가질 수 있습니까? 아니면 항상 비밀리에 'Foo '을 마음 속에두고 있다는 것을 알고 있습니까? 변수가'const'이라면 값을 재 할당 할 수 없기 때문에 구현 될 수 있습니다. 그런 다음'const T'와'T'에 대해 서로 다른 어휘 규칙이 생기고 커다란 혼란이 이어질 것입니다. –