2012-10-01 45 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

作爲brainfart的結果,我實際上是在尋找解決錯誤問題的方法,所以我認爲這也可能發生在其他人身上。 (請參閱我給出的另一個答案的修訂歷史記錄:http://stackoverflow.com/posts/12675321/revisions) –

+0

突然激增的「博客帖子」問題是怎麼回事?昨天大家都想打造一個外殼,今天大家都在發帖子問題... –

+0

@KerrekSB:這是星期一。我們還沒有開啓rev。而星期天是當夢想成真。任何shell的東西的例子? –

回答

2

common_type應該是你的答案:

#include <type_traits> 

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

...我在我的個人代碼庫中實際上有這樣的東西,甚至用這種方式調用它,所以facepalm。它在語義上與'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推導*


*所以不會發生「編譯時溢出」或「編譯時間不確定,行爲」