[LLVMbugs] [Bug 19706] New: Default template arguments are not used with injected-class-name of class template specialization
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Sat May 10 13:33:57 PDT 2014
http://llvm.org/bugs/show_bug.cgi?id=19706
Bug ID: 19706
Summary: Default template arguments are not used with
injected-class-name of class template specialization
Product: clang
Version: 3.4
Hardware: Other
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: C++
Assignee: unassignedclangbugs at nondot.org
Reporter: hstong at ca.ibm.com
CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
Classification: Unclassified
When using the injected-class-name of a class template specialization as a
template-name, Clang does not pick up default arguments in the same way that it
would for a name denoting the class template itself.
Discussion on the core reflector indicates that the set of default template
arguments considered is ideally the merging of all default template arguments
from all declarations of the class template.
This difference in the ideal treatment of class templates as opposed to
functions stems from the more limited contexts where a class template may be
declared with default arguments.
GCC and ICC both accept the following.
### SOURCE:> cat defaultTmplArgsOnInjected.cc
template <typename T> struct A {
static void foo();
};
A<void> a; // refer to specialization before default arguments added
template <typename T = short> struct A;
template <> void A<void>::foo() { // use same specialization
A< > *ap; // needs default argument to be transferred to the
injected-class-name
}
Return: 0x00:0
### COMPILER INVOCATION AND ACTUAL OUTPUT:> clang++ -std=c++03
defaultTmplArgsOnInjected.cc -c
defaultTmplArgsOnInjected.cc:10:4: error: too few template arguments for class
template 'A'
A< > *ap; // needs default argument to be transferred to the
injected-class-name
^
defaultTmplArgsOnInjected.cc:1:31: note: template is declared here
template <typename T> struct A {
~~~~~~~~~~~~~~~~~~~~~ ^
1 error generated.
Return: 0x01:1
### EXPECTED OUTPUT:
Clean compile.
### VERSION INFO:> clang++ -v
clang version 3.4 (tags/RELEASE_34/final)
Target: powerpc64-unknown-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/lib/gcc/ppc64-redhat-linux/4.4.4
Found candidate GCC installation: /usr/lib/gcc/ppc64-redhat-linux/4.4.6
Selected GCC installation: /usr/lib/gcc/ppc64-redhat-linux/4.4.6
Return: 0x00:0
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140510/98aeb163/attachment.html>
More information about the llvm-bugs
mailing list