gpt4 book ai didi

c++ - `static_assert` 和构造函数中的顺序或错误

转载 作者:行者123 更新时间:2023-11-27 22:39:50 26 4
gpt4 key购买 nike

为什么主体中的这个 static_assert 比我正在检查的错误早于代码中发生的错误?这是标准行为还是特定于编译器?

我很惊讶地发现这是我想要实现的:

template<typename R, typename>
Fizzer_t::Fizzer_t (const R & range_of_itemdefs)
: playdef { std::begin(range_of_itemdefs), std::end(range_of_itemdefs) }
{
static_assert (std::is_constructible_v<itemdef_t, typename boost::range_value<R>::type>);
}

static_assert 位于构造函数的主体中,它在词法和流方面相同条件导致真正错误的成员初始化之后.

我想我需要弄清楚另一个间接级别以获得干净的 static_assert,而不是从成员的构造函数调用的模板扩展中获取大量细节。

我在 n4659 中唯一能找到的是第 156 页的 §10 ¶6。它只是说这会导致(故意的)错误;与发现它的阶段或函数各部分的分析顺序无关。

最佳答案

C++ 标准不保证编译器错误消息以特定顺序发出,无论是词法顺序还是流式顺序。这是一种反复出现的行为,尤其是在出现多个错误的情况下。此外,您不会收到代码中所有错误的通知,而只会收到其中的一些错误通知,因为编译过程在遇到严重错误时会被中断。

关于c++ - `static_assert` 和构造函数中的顺序或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49829932/

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