我想在下面的代码中使用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