내가 코드의 두 조각이 있습니다C++ 11 템플릿 인스턴스화 오류
1)
template< class T >
auto min(T a, T b) -> decltype(a)
{
return a < b ? a : b;
}
int main()
{
struct A{};
auto x = min(2, 3) ;// success
auto a = A{};
auto b = A{};
auto c = min(a,b);// here is error
}
그리고 2)
template< class T >
auto min(T a, T b) ->decltype(a<b, a)
{
return a < b ? a : b;
}
int main()
{
struct A{};
auto x = min(2, 3) ;// success
auto a = A{};
auto b = A{};
auto c = min(a,b);// here is another error
}
첫 번째 및 두 번째 대소 문자의 다른 오류는 무엇입니까? 어느 것이 더 낫습니까?
UPD : '분'구현은 더 나은 무엇입니까? INT가
1) 받고있는 오류에 대해서는 언급하지 않았습니다. 2) 예제 코드에서 볼 수 있듯이 struct에 대해 operator <가 정의되어 있지 않기 때문에 기꺼이 할 것입니다. – Rapptz
구조체 A에 대해'a nijansen
** 'auto' 키워드 **를 남용하지 마십시오.함수'min()'은 같은 타입의 인스턴스와 비교되므로, 후행 리턴 타입을 사용할 이유가 없습니다. 리턴 타입은 분명히'T'입니다. 또한'decltype (a Manu343726