gex*_*ide 8 c++ templates static-assert assertions c++11
在我之前的问题中,我想使用static_assert将模板参数限制为特定的子类型.问题得到了解答,获得批准的代码如下:
template <typename T>
struct X {
static_assert(std::is_base_of<Y,T>::value,"T must be derived from Y!");
};
Run Code Online (Sandbox Code Playgroud)
现在,我想让错误信息更简洁.即,我想说明哪种类型违反了这种约束.例如,如果类A不是从Y某个实例派生出来的X<A>,那么错误消息应该打印"类型参数必须从Y派生,但A不是".
这是用标准库实现的吗?
我看到两个挑战:
你不能做这个.static_assert想要一个字符串文字.你没有办法组装的语义身份T和Y字符串文字.
您可以希望编译器提供易于读取的模板实例化堆栈的回溯,并为您提供封闭类模板实例化的值T和Y模板参数.
其他人也在考虑这个问题,例如http://comments.gmane.org/gmane.comp.compilers.clang.devel/5073.