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

            Bug ID: 86237
           Summary: Narrowing from int to bool is not allowed in a non
                    type template argument
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zhonghao at pku dot org.cn
  Target Milestone: ---

The code sample is as follow:

enum { E = 2 };
template <bool> void f(int) {}
template <int> void f() {}

int
main ()
{
 f<1 * 1>();
 f<1 << 1>();
 f<1 ? 3 : 2>();
 f<E>();

 f<1 * 1>(0);
 f<1 << 1>(0);
 f<1 ? 3 : 2>(0);
 f<E>(0);
}

clang++ rejects it with error messages:
error: no matching function for call to 'f'
     f<1 << 1>(0);
error: no matching function for call to 'f'
     f<1 ? 3 : 2>(0);

The code comes from the test suite of gcc
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79184)

I tried g++ -std=c++11, but it still accepts the code. 

I thought that this is a bug in clang, and reported it to
https://bugs.llvm.org/show_bug.cgi?id=37866

Richard Smith believe that this is a gcc bug. Shall gcc repair the problem?

Reply via email to