gpt4 book ai didi

c++ - static_assert 何时相对于模板实例化进行评估

转载 作者:行者123 更新时间:2023-11-28 03:05:00 30 4
gpt4 key购买 nike

我有一个模板函数来操作递归数据结构。在调用的初始函数中,我有以下形式:

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。

最佳答案

不存在static_assert 相对于模板实例化的求值顺序这样的事情。该标准只是说,如果 static_assert 的第一个参数中的表达式在编译时计算为 false,则程序格式错误,诊断应包括第二个参数中的文本。

换句话说,static_assert(false) 被视为语法错误或任何其他违反格式良好约束的行为。自然地,如果有多个错误导致程序格式错误,则标准没有指定编译器应该为它们发出诊断的顺序,甚至没有指定它是否应该为每个错误发出消息。

关于c++ - static_assert 何时相对于模板实例化进行评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942385/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com