public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "kariya_mitsuru at hotmail dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libstdc++/61795] New: [C++11] return type of std::pow(std::complex<float>, int) should be std::complex<double>
Date: Sun, 13 Jul 2014 17:55:00 -0000	[thread overview]
Message-ID: <bug-61795-4@http.gcc.gnu.org/bugzilla/> (raw)

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61795

            Bug ID: 61795
           Summary: [C++11] return type of std::pow(std::complex<float>,
                    int) should be std::complex<double>
           Product: gcc
           Version: 4.10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kariya_mitsuru at hotmail dot com

With libstdc++, the return type of std::pow(std::complex<float>, int) is
std::complex<float>.
However, In C++11 mode, the return type of std::pow(std::complex<float>, int)
should be std::complex<double>.


According to C++11 standard 26.4.9[cmplx.over] paragraph 3, "if either argument
has type complex<double>, double, or an integer type, then both arguments are
effectively cast to complex<double>."

The return type of std::pow(std::complex<double>, std::complex<double>) is
std::complex<double>, So I think that std::pow(std::complex<float>, int) should
be std::complex<double> in C++11 mode.


The sample code below can show whether the return type is std::complex<double>.
================================================================================
#include <iostream>
#include <typeinfo>
#include <complex>

int main()
{
  std::cout << std::boolalpha
            << (typeid(std::pow(std::complex<float>(1), 1)) ==
typeid(std::complex<double>))
            << std::endl;
}
================================================================================
cf. http://melpon.org/wandbox/permlink/zW8TWZe9kKzKWqFq


While in C++03 mode, the return type of std::pow(std::complex<float>, int)
should be std::complex<float>, I think.

Note that this problem does not occur in std::complex<double> and
std::complex<long double> because there is no difference between C++03 and
C++11.


See also: PR56106, PR57974


             reply	other threads:[~2014-07-13 17:55 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-13 17:55 kariya_mitsuru at hotmail dot com [this message]
2014-07-13 18:29 ` [Bug libstdc++/61795] " daniel.kruegler at googlemail dot com
2014-07-14  3:41 ` kariya_mitsuru at hotmail dot com
2015-04-09 15:43 ` redi at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-61795-4@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).