用户定义的文字运算符(constexpr构造函数)

时间:2018-02-21 18:24:05

标签: c++ c++11 g++ clang

我正在实现一个类,该类使用随之而来的可能的算术来定义复数。现在,我正在尝试编写一个用户定义的文字运算符:

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};
}

0 个答案:

没有答案