2015-12-02 57 views
0

我在編譯時過濾元組,如果元組爲空或者元組包含多個元素,我想輸出自定義錯誤消息。多個static_assert取決於相同的值

static_assert似乎有點太複雜,因爲我需要使用布爾邏輯。

static_assert(size != 0 || size >= 1, "Empty"); 
static_assert(size == 1 || size == 0, "More than 1"); 

我不假設這樣的事情是可能的嗎?

static_if(size == 0) compile_err("Empty"); 
static_if(size > 1) compile_err("More than 1"); 

可做C的新版本++提供了一個替代static_assert?

+1

爲什麼你需要'static_assert'更復雜的邏輯?顛倒你的兩個'static_if'條件應該以同樣的方式工作。在第一個'static_assert'中,假設一個無符號類型,'size≠0⇔size≥1',所以任何一個都是多餘的。 – chris

+5

'static_assert(size!= 0,「不能爲空」)和'static_assert(size <= 1,「太多」)似乎是你想要的。 –

+0

@MatsPetersson你說得對,我不知道爲什麼我沒有像你那樣寫。我想我一定很困惑,'false'觸發assert而不是'true'。 –

回答

1

static_assert允許布爾邏輯。它不允許呼叫(非constexpr)功能。所以沒有理由不能在代碼中使用該邏輯。

static_assert(sizeof(Args...) != 0, "Empty"); 
static_assert(sizeof(Args...) < 2, "More than 1"); 
+0

看來我只是感到困惑,但是在我接受答案之前,你需要否定你的兩個表達式,因爲'static_assert'在'false'觸發。 –

+0

@MaikKlein:完成。 –