다음과 같은 템플릿 구조가 주어집니다.
template<typename T>
struct Foo {
Foo(T&&) {}
};
이것은 컴파일되고 다음과 T
같이 추론됩니다 int
.
auto f = Foo(2);
그러나 이것은 컴파일되지 않습니다 : https://godbolt.org/z/hAA9TE
int x = 2;
auto f = Foo(x);
/*
<source>:12:15: error: no viable constructor or deduction guide for deduction of template arguments of 'Foo'
auto f = Foo(x);
^
<source>:7:5: note: candidate function [with T = int] not viable: no known conversion from 'int' to 'int &&' for 1st argument
Foo(T&&) {}
^
*/
그러나 Foo<int&>(x)
허용됩니다.
그러나 중복으로 보이는 사용자 정의 추론 가이드를 추가하면 작동합니다.
template<typename T>
Foo(T&&) -> Foo<T>;
사용자 정의 추론 가이드가없는 T
것처럼 추론 할 수없는 이유는 무엇 int&
입니까?
Foo<T<A>>