我有一个模板函数来操作递归数据结构。在调用的初始函数中,我有以下形式:
template <unsigned Pos, typename... Ps>
auto get(param<Ps...> i) -> int
{
static_assert(Pos < sizeof...(Ps), "Error message");
return helper<Pos>(i.rest);
}
在我正在使用的特定情况下,我知道helper<Pos>(i.rest)
它将无法编译,因为它试图超出数据结构的末尾。
我希望 static_assert 停止编译,但它似乎实例化了模板并在检查 static_assert 之前失败。实际正确的行为是什么?
我正在使用 GCC 4.7.3。