<html>
<head>
<base href="https://llvm.org/bugs/" />
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW --- - Invalid subexpression in sizeof fails to remove candidate"
href="https://llvm.org/bugs/show_bug.cgi?id=28667">28667</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Invalid subexpression in sizeof fails to remove candidate
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>All
</td>
</tr>
<tr>
<th>OS</th>
<td>All
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Keywords</th>
<td>accepts-invalid, compile-fail, miscompilation
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>C++11
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>hstong@ca.ibm.com
</td>
</tr>
<tr>
<th>CC</th>
<td>dgregor@apple.com, llvm-bugs@lists.llvm.org
</td>
</tr>
<tr>
<th>Classification</th>
<td>Unclassified
</td>
</tr></table>
<p>
<div>
<pre>In the following case, Clang fails to detect an error in the subexpression of
the sizeof during substitution of the template arguments into the signature of
the function in question.
Online compiler: <a href="http://melpon.org/wandbox/permlink/by24bjnKIvVPecSH">http://melpon.org/wandbox/permlink/by24bjnKIvVPecSH</a>
### SOURCE (<stdin>):
struct A { A(int); };
template <typename T> void foo(void *, char (*)[sizeof(0, A(T()))]) { }
template <typename T> void foo(int, ...);
int main(void) { foo<decltype(nullptr)>(0, 0); }
### COMPILER INVOCATION:
clang++ -cc1 -fsyntax-only -x c++ -std=c++11 -
### EXPECTED OUTPUT:
(clean compile)
### ACTUAL OUTPUT:
<stdin>:6:18: error: call to 'foo' is ambiguous
int main(void) { foo<decltype(nullptr)>(0, 0); }
^~~~~~~~~~~~~~~~~~~~~~
<stdin>:3:28: note: candidate function [with T = nullptr_t]
template <typename T> void foo(void *, char (*)[sizeof(0, A(T()))]) { }
^
<stdin>:4:28: note: candidate function [with T = nullptr_t]
template <typename T> void foo(int, ...);
^
1 error generated.
### COMPILER VERSION INFO (clang++ -v):
clang version 4.0.0 (trunk 276290)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/llvm-head/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.3
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>