我想使用 constexpr bool(useF
在下面的示例中)来启用以下代码中的功能。在这里,调用A::f()
. 此外,我想成为别名模板 ( a
),void
以防我关闭该功能。
我尝试使用 constexpr if 语句,但主体仍在被实例化,这会导致编译错误。如果我使用包装模板 ( 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();
}
我正在使用带有 -std=c++17 的 g++-7.0.1