Bug 431686 - Error on template expansion with function with default argument
Summary: Error on template expansion with function with default argument
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Fedora
Classification: Fedora
Component: gcc
Version: rawhide
Hardware: i386
OS: Linux
low
medium
Target Milestone: ---
Assignee: Jakub Jelinek
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2008-02-06 14:31 UTC by Horst H. von Brand
Modified: 2008-02-06 17:00 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2008-02-06 15:38:51 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)
A C++ file that shows the error (159 bytes, text/plain)
2008-02-06 14:31 UTC, Horst H. von Brand
no flags Details
Another testcase (223 bytes, text/plain)
2008-02-06 15:28 UTC, Horst H. von Brand
no flags Details


Links
System ID Private Priority Status Summary Last Updated
GNU Compiler Collection 32839 0 None None None Never

Description Horst H. von Brand 2008-02-06 14:31:36 UTC
Description of problem:
Compiling the attached file gives an error with g++ 4.3, but the same worked
fine with 4.1. This is cut down from 

Version-Release number of selected component (if applicable):
gcc-c++-4.3.0-0.7.i386

How reproducible:
Always

Steps to Reproduce:
1. Compile the attached file
2.
3.
  
Actual results:
tst.cc: In function ‘void ff(int, T) [with T = void (*)(int, int)]’:
tst.cc:13:   instantiated from here
tst.cc:4: error: too few arguments to function

Expected results:
No error, realf() can be called with one or two arguments. AFAIU the default
value of the second argument is just a shorthand for an overload of the function.

Additional info:

Comment 1 Horst H. von Brand 2008-02-06 14:31:36 UTC
Created attachment 294106 [details]
A C++ file that shows the error

Comment 2 Jakub Jelinek 2008-02-06 14:51:50 UTC
That's a bug in the testcase.
See http://gcc.gnu.org/ml/gcc-patches/2007-07/msg01645.html and
http://gcc.gnu.org/PR32839

Comment 3 Horst H. von Brand 2008-02-06 15:26:34 UTC
I'm sorry, but that doesn't look right.

  int f(int i = 117);

has what type? int (*)() or int (*)(int)?

If I go:

  int f();
  int f(int);

what is the type of f? I'd say this is ambiguous, to say the least.

Besides, gcc-4.1 did do "the right thing", i.e., consider the first alternative
(which matches).

Comment 4 Horst H. von Brand 2008-02-06 15:28:01 UTC
Created attachment 294113 [details]
Another testcase

How come callf() gives an error, while the completely equivalent callg() goes
through?

Comment 5 Jakub Jelinek 2008-02-06 15:38:51 UTC
If you want to argue about this, do so upstream in the PR I referenced.
I'm not convinced you are right.

Comment 6 Horst H. von Brand 2008-02-06 17:00:43 UTC
Reported as 35106 on GCC's bugzilla


Note You need to log in before you can comment on or make changes to this bug.