在下面的代码中,我试图对函数使用条件异常规范,但是编译失败,尽管如果使用外部函数,它工作得很好。
void may_throw();
// ERROR: expression must have bool type or be convertible to bool
void check () noexcept(may_throw());
int main()
{
// works just fine!
std::cout << noexcept(may_throw());
}
问题是如何检查函数是否抛出而不更改函数原型以有条件地指定noexcept。
我不能更
我想设计一个类:
template <class... F> class overload_set;
这将在构造时获取一个可调用列表,并将有一个operator(),它将应用经典的重载解析规则来决定调用哪个函数。
对于两个函数,如下所示:
template <class F0, class F1>
struct overload_set: F0, F1
{
constexpr overload_set(F0 f0, F1 f1): F0(f0), F1(f1) {}
using F0::operator();
using F1::operator
假设C++编译器正在编译一个函数,该函数的定义在与其调用相同的转换单元中可用。假设它既不抛出自身,也不调用已知要抛出函数。假设没有调用extern C代码,也没有使用可能为零的数值除法。
在这些假设下,编译器会将函数视为noexcept吗?如果没有,是否还有其他条件可以推断出noexcept?
具体地说,对于超简单的函数,比如
void foo() { } /* this one */
class A {
int x_;
public:
x() const { return x_; } /* ... and this one */
}
我想要一个只基于标准的答案,最重
我发现:
继承建筑工人..。在默认情况下,都是required (True),除非它们被要求调用一个函数,这个函数是to (False),在这种情况下,这些函数是to(False)。
这是否意味着在下面的示例中,继承的构造函数是noexcept(true),即使它在基类中被显式定义为noexcept(false),或者它本身被认为是一个函数,要调用的是to (False)?
struct Base {
Base() noexcept(false) { }
};
struct Derived: public Base {
using Base::Base;
};
in
#include <vector>
class A
{
std::vector<int> vec;
void swap( A & other) noexcept(noexcept(vec.swap(other.vec)))
{
vec.swap(other.vec);
}
};
int main()
{
}
此代码在clang(3.4)下编译,而在gcc (4.7.1)下编译。谁能告诉我我做错了什么?
编辑
gcc的错误信息是:
error: invalid use of incomplete type ‘c
上下文是一个库,用于表示数字(在本例中为整数),以基数幂表示数字的位置,作为模板参数传递给每个基R。这些派生类型是基数R的数字,R_alphabet = {0,1,2,…,R-1}.基类将dig_t对象保持为base_dig_t,加上该数字的容器中的半径。
template<std::unsigned_integral Type>
struct base_dig_t;
template< std::unsigned_integral Type,
Type R
>
// It does not add any data mem