我想在下面的代碼中使用constexpr布爾(useF
)在下面的代碼中啓用一個功能。在這裏,撥打A::f()
。另外,在我關閉該功能的情況下,我希望將別名模板(a
)設爲void
。如果constexpr(條件)作爲編譯時條件
我試着用constexpr if語句,但是body仍然在被實例化,這會導致編譯錯誤。如果我使用包裝模板(X
),則正如我預期的那樣丟棄身體,但這對我來說似乎很難看。有沒有其他方法可以做到這一點?
constexpr bool useF = false;
struct A {
static void f() {}
};
using a = std::conditional<useF, A, void>::type;
template<typename L>
struct X {
static void h() {
if constexpr(std::is_same<L, A>::value) {
L::f(); // not instantiated, no error
}
}
};
int main() {
if constexpr(useF) {
a::f(); // error!?
}
X<a>::h();
}
我使用克++ - 7.0.1與-std = C++ 17
對不起,標籤選擇錯了!如果我選擇標籤C++ 17,插入標籤C++ 1z ...奇怪。 – wimalopaan
因爲它是[同義詞](http://stackoverflow.com/tags/c%2b%2b1z/synonyms)。 – songyuanyao