<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 - Incorrect "dependent using declaration resolved to type without 'typename'" error"
href="https://bugs.llvm.org/show_bug.cgi?id=45026">45026</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Incorrect "dependent using declaration resolved to type without 'typename'" error
</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>Linux
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</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>predelnik@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>The test case is a bit convoluted, I reduced it with help of creduce and some
manual work. The following program:
template <typename T, typename = decltype(T().get_traits().f())>
int sfinaed_func(T);
template <typename T> struct Traits {
typename T::NestedClass v;
void f();
};
template <typename> struct Container;
struct TraitsClass {
Traits<Container<int>> get_traits();
};
template <typename> struct ParentContainer {
struct NestedClass {};
};
template <typename cl> struct Container {
struct NestedClass : ParentContainer<cl>::NestedClass {
using parent_t = typename ParentContainer<cl>::NestedClass;
// using of parent constructor:
using parent_t::NestedClass;
// Removing parent_t alias fixes build
};
};
auto f () {
TraitsClass k;
return sfinaed_func(k);
}
Fails to compile with an error:
<span class="quote">> <source>:19:21: error: dependent using declaration resolved to type without 'typename'</span >
on the line
`using parent_t::NestedClass;`
which is not a type but inheriting constructor syntax.
There seems to be a lot of stuff required for this behavior but particularly
type alias `parent_t` usage instead of directly mentioning the type.
Also it seems to compile fine with latest msvc and gcc:
<a href="https://gcc.godbolt.org/z/3zrKMc">https://gcc.godbolt.org/z/3zrKMc</a></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>