This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/86251] New: legal or illegal code?


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

            Bug ID: 86251
           Summary: legal or illegal code?
           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: ---

Clang++ compiles the following code without any error messages:

#include <utility>
#include <iostream>

using namespace std;

template <typename _T, _T _V>
        void foo()
        {
                cout << __PRETTY_FUNCTION__ << endl;
        }

int a = 0;

int b() { cout << __PRETTY_FUNCTION__ << endl; }

int main()
{
        foo<int, 9>();
        foo<int (), b>();
}

In the contrast, gcc produces the following error message:
‘int()’ is not a valid type for a template non-type parameter foo<int (), b>();

A bug report of gcc (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=6030)
discusses more details of this issue.

I believed that clang++ shall add the error message as g++ does, and reported
the bug to https://bugs.llvm.org/show_bug.cgi?id=37829

However, Richard Smith believes that the code is legal, since int() decays to
int(*)(), which is valid.

His analysis seems to be contrary to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=6030. Is this a bug in g++?

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]