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

            Bug ID: 94590
           Summary: Incorrectly accepts invalid C++11 braced
                    initialisation of double from long double if
                    sizeof(long double)==sizeof(double)
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dangelog at gmail dot com
                CC: dangelog at gmail dot com, marc at kdab dot com,
                    unassigned at gcc dot gnu.org
  Target Milestone: ---

+++ This bug was initially created as a clone of Bug #92856 +++

(Sorry, couldn't find a way to reopen _that_ bug, so creating a new one)


Hi,

When using list-initialization from a long double to double, GCC warns (and
rejects the code in SFINAE contexts) only on platforms where sizeof(long
double) > sizeof(double). This is OK, and documented.


However: on platforms where long double is the same as double, GCC incorrectly
accepts the code without emitting warnings, and affecting SFINAE.

For instance

* On ARM: https://godbolt.org/z/SRg3fr
* On X86-64 also passing -mlong-double-64: https://godbolt.org/z/GnRkHC

SFINAE contexts are affected as well: https://godbolt.org/z/icMA3k

Clang, MSVC reject the code.

Reply via email to