Как использовать пользовательские литералы для комплексных чисел?

Что я делаю не так, когда пытаюсь выполнить std::pow(1.0i, 2)? Это мое понимание пользовательского литерала operator""iили это как я использую комплекс pow-overload?

Последняя строка показывает ошибку при компиляции с g++-6.2 или g++-5:

#include <iostream>
#include <complex>
using std::cout; using std::complex;
int main() {
    complex<double> z1 (0, 1);
    complex<double> z2 = std::pow(z1, 2);
    using namespace std::complex_literals;
    complex<double> z3 = std::pow(1.0i, 2); // <<< error
}

Сообщение:

error: no matching function for call to ‘pow(__complex__ double, int)’
     complex<double> z3 = std::pow(1.0i, 2)

Если я опущу последнюю строку, все в порядке.

0 ответов

Другие вопросы по тегам