2013-07-10 22 views
3
constexpr uint32_t BitPositionToMask(int i,int Size){ 
static_assert(i < Size,"bit position out of range"); 
return 1 << i; 
} 

這會產生:爲什麼比較一個constexpr函數的兩個參數不是靜態斷言的一個恆定條件?

error: non-constant condition for static assertion 

在GCC 4.6.2難道我沒有得到的東西或者這是一個錯誤的GCC?

更新: 謝謝安迪成爲我的書呆子守護天使。由於在編譯時我已經擁有了這些值,我只是將它作爲模板,並且按預期工作。

template<int i,int Size> 
constexpr uint32_t BitPositionToMask(){ 
    static_assert(i < Size,"bit position out of range"); 
    return 1 << i; 
} 

回答

13

一個constexpr功能也可以在運行時評估的參數調用(在這種情況下,它只是被執行,就像任何普通功能)。例如參見live example

另一方面,static_assert()嚴格要求其條件是一個可以在編譯時評估的常量表達式。

+0

因爲它「可能」是一個運行時間函數static_assert不像我,哦,嘿安迪你似乎回答我的所有問題。 – odinthenerd

+0

@PorkyBrain:大聲笑,我發誓我沒有故意這樣做(其實我最近並沒有真正回答很多問題) –

+0

你什麼時候打了50k?天啊! – chris

相關問題