<html>
<head>
<base href="https://bugs.llvm.org/">
</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 - Clang++ accepts invalid template code"
href="https://bugs.llvm.org/show_bug.cgi?id=44034">44034</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Clang++ accepts invalid template code
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Windows NT
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>enhancement
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>C++
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>Darrell.Wright@gmail.com
</td>
</tr>
<tr>
<th>CC</th>
<td>blitzrakete@gmail.com, dgregor@apple.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
</td>
</tr></table>
<p>
<div>
<pre>I accidently produced this invalid code and it worked as intended until I
tested further. However, the integer_sequence should never have been deduced
<a href="https://gcc.godbolt.org/z/dn5s4v">https://gcc.godbolt.org/z/dn5s4v</a>
Affects older clang too.
This will return 20, but should be an error
#include <algorithm>
#include <type_traits>
namespace algorithm_impl {
template <typename Function, typename... Args, size_t... Is>
constexpr void do_n(Function &&func, Args &&... args,
std::integer_sequence<size_t, Is...>) {
if constexpr (sizeof...(Is) > 0) {
(void)((func(args...), Is) + ...);
}
}
} // namespace algorithm_impl
template <size_t count, typename Function, typename... Args>
constexpr void do_n(Function &&func,
Args &&... args) noexcept(noexcept(func(args...))) {
algorithm_impl::do_n(std::forward<Function>(func),
std::forward<Args>(args)...,
std::make_integer_sequence<size_t, count>{});
}
constexpr int do_n_1_test() {
int n = 0;
do_n<20>([&n] { ++n; });
return n;
}
int main() { return do_n_1_test(); }</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>