I don't think we have an open PR for this "well known" issue so... As you can
see, in the example below, the pragma is totally ineffective with templates,
even when the involved types are non dependent.

By the way, sad to say that, but the way ICC implements the GCC pragma for
compatibility sake is, once more, better than the original: no warning from ICC
(-Wall on ICC as a switch, excellent warnings without the pragma).

paolo:~/Work> more test.h
#pragma GCC system_header

int f()
{
  double d = 0.0;
  return d;
}

template<typename T>
int g()
{
  double d = 0.0;
  return d;
}

template<typename T>
T h()
{
  double d = 0.0;
  return d;
}
paolo:~/Work> more test.cc
#include "test.h"

int main()
{
  f();
  g<int>();
  h<int>();
}
paolo:~/Work> g++ -c -Wconversion test.cc
test.h: In function 'int g() [with T = int]':
test.cc:6:   instantiated from here
test.h:13: warning: converting to 'int' from 'double'
test.h:13: warning: conversion to 'int' from 'double' may alter its value
test.h: In function 'T h() [with T = int]':
test.cc:7:   instantiated from here
test.h:20: warning: converting to 'int' from 'double'
test.h:20: warning: conversion to 'int' from 'double' may alter its value


-- 
           Summary: pragma GCC system_header vs templates
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: pcarlini at suse dot de


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

Reply via email to