2012-10-01 6 views
-1

두 피연산자의 프로모션 유형을 얻는 방법은 무엇입니까? 프로모션 유형 가져 오기

이 같은 코드에 대한 유용 할 수 있습니다 :

template <typename LHS, typename RHS> 
bool would_overflow_upon_addition (LHS lhs, RHS rhs) { 
    return lhs > std::numeric_limits<promoted<LHS,RHS>::type>::max()-rhs; 
} 
+0

, 나는 실제로 잘못된 질문에 대한 해결책을 찾고 있었기 때문에 다른 사람들에게도 일어날 수 있다고 생각했습니다. (내가 준 또 다른 답변의 개정 내역을 참조하십시오 : http://stackoverflow.com/posts/12675321/revisions) –

+0

"블로그 게시물"질문의 갑작스런 급증은 무엇입니까? 어제 모두가 껍데기를 만들기를 원했고, 오늘 모두 빨판 질문을 게시하고 있습니다 ... –

+0

@KerrekSB : 월요일입니다. 우리는 아직 리바운드에 있지 않습니다. 반면 일요일은 ppl 꿈입니다. 셸의 모든 예가 무엇입니까? –

답변

2

common_type이 "시간 - 오버 플로우를 컴파일"일이나하지 않습니다하십시오 brainfart의 결과로

#include <type_traits> 

typedef std::common_type<LHS, RHS>::type ctype; 
+0

... 나는 실제로 내 개인 코드베이스에서 이와 비슷한 것을 가지고 있으며, 심지어 이런 방식으로, 심지어 그렇게 부른 다. 그것은'decltype (lhs + rhs)'와 의미 적으로 다른가요? –

+0

@phresnel : 근본적인 산술 유형에 대해 동일합니다. –

0

이 하나가 생각하는 것보다 실제로 간단하다 :

template <typename LHS, typename RHS> 
bool would_overflow_upon_addition (LHS lhs, RHS rhs) { 
    return lhs > std::numeric_limits<decltype(lhs+rhs)>::max()-rhs; 
} 

decltype(X)

이 평가되지 않습니다, X 단지 정적 유형은 을 유도 *


* 그래서 당신의 대답해야한다 "컴파일 시간에 정의되지 않은-행동"