我正在实现一个类,该类使用随之而来的可能的算术来定义复数。现在,我正在尝试编写一个用户定义的文字运算符:
constexpr Complex operator "" _i(long double arg) {
return Complex{0.0, arg};
}
这让我写下以下内容:
Complex c = 1.0 + 5.0_i;
为此,我必须实现一个与之配合的constexpr构造函数:
constexpr Complex(double real, double imaginary) : re(real), im(imaginary) {};
其中 re 和 im 是成员变量。在 g ++ 中进行编译时,此方法正常,但只要我使用 clang ,我就会收到此错误:
error: constexpr function never produces a constant expression[-Winvalid-constexpr]
我做错了吗? g ++比clang更少限制吗?
以下整个实施:
class Complex {
private:
double re;
double im;
public:
// Class constructors
Complex() : re(0.0), im(0.0) {};
Complex(const double real) : re(real) {};
constexpr Complex(const double real, const double imaginary) : re(real), im(imaginary) {};
/* All the overloaded functions etc. below */
};
constexpr Complex
operator "" _i(long double arg) {
return Complex{0.0, arg};
}