[Bug c++/71225] New: [7 Regression] Overeager instantiation of members of non-template class nested in class template
Casey at Carter dot net
gcc-bugzilla@gcc.gnu.org
Sun May 22 16:25:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71225
Bug ID: 71225
Summary: [7 Regression] Overeager instantiation of members of
non-template class nested in class template
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: Casey at Carter dot net
Target Milestone: ---
Created attachment 38540
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38540&action=edit
Repro
r236559 fails to compile this TU:
namespace std {
template <bool, class> struct enable_if;
}
template <class T>
struct BidirectionalRange;
template<typename Rng>
struct stride_view
{
struct adaptor
{
template<int _c_11 = 42, typename std::enable_if<
_c_11 == 43 || BidirectionalRange<Rng>(), int>::type = 0>
void clean() const
{}
template<int _c_14 = 42, typename std::enable_if<
_c_14 == 43 || !BidirectionalRange<Rng>(), int>::type = 0>
void clean() const
{}
void advance()
{
clean();
}
};
};
with diagnostics:
$ ~/gcc-r236559/bin/g++ repro2.cpp -c
repro2.cpp: In member function ‘void stride_view<Rng>::adaptor::advance()’:
repro2.cpp:23:19: error: call of overloaded ‘clean()’ is ambiguous
clean();
^
repro2.cpp:15:14: note: candidate: void stride_view<Rng>::adaptor::clean()
const [with int _c_11 = 42; typename std::enable_if<((_c_11 == 43) ||
BidirectionalRange<Rng>()), int>::type <anonymous> = 0; Rng = Rng]
void clean() const
^~~~~
repro2.cpp:19:14: note: candidate: void stride_view<Rng>::adaptor::clean()
const [with int _c_14 = 42; typename std::enable_if<((_c_14 == 43) || (!
BidirectionalRange<Rng>())), int>::type <anonymous> = 0; Rng = Rng]
void clean() const
^~~~~
This is a regression from the behavior of about a week ago.
More information about the Gcc-bugs
mailing list