【发布时间】:2017-03-14 06:28:46
【问题描述】:
当表达式依赖于类类型本身时,有没有办法在类中进行静态断言?也许延迟评估直到类型完成或模板实例化之后?
示例代码:
#include <type_traits>
template<typename T>
struct Test {
T x = 0; // make non-trivial
static_assert(std::is_trivial<Test<T>>::value, "");
};
int main() {
// would like static assert failure, instead get 'incomplete type' error
Test<int> test1;
Test<float> test2;
return 0;
}
【问题讨论】:
-
在这种特定情况下,您可以将逻辑放入
TestImpl并让Test继承它(使用继承的构造函数和 co。)并让其中的static_assert在TestImpl上工作.但这当然不是一个通用的解决方案。 -
听起来不错,但为什么你说这不是一个通用的解决方案?
-
嗯,我在考虑一些无法正常工作的极端情况,但我再也看不到它们了。我会发布它作为答案。
标签: c++ templates typetraits static-assert