http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58986

            Bug ID: 58986
           Summary: [C++11] Narrowing for initializer lists must be an
                    error
           Product: gcc
           Version: 4.8.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: thomas.br...@virtuell-zuhause.de

Compiling
#########
struct B {
  B(int, double) {}
};

void g(B) {};
int main(int argc, char** argv)
{
  g( {'a', 'b'} ); // OK: g(B(int,double)) user-defined conversion
  g( {1.0, 1.0} ); // error: narrowing
}
#########
with LANG=C g++ -std=c++11 gcc-bug-narrowing.cpp

with g++ 4.8.2 compiles fine with the warning:
#########
gcc-bug-narrowing.cpp: In function 'int main(int, char**)':
gcc-bug-narrowing.cpp:9:17: warning: narrowing conversion of '1.0e+0' from
'double' to 'int' inside { } [-Wnarrowing]
   g( {1.0, 1.0} ); // error: narrowing
#########

Although C++11 standard ยง13.3.3.1.5 3 states that narrowing for initializer
lists is an error.

Reply via email to