https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31584
Richard Smith <richard-gccbugzilla at metafoo dot co.uk> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |richard-gccbugzilla@metafoo
| |.co.uk
--- Comment #13 from Richard Smith <richard-gccbugzilla at metafoo dot co.uk>
---
(In reply to Andrew Pinski from comment #12)
> GCC, ICC, clang and MSVC all accept the testcase in comment #11.
I believe the testcase is valid. The instantiation of `C<double>` looks like
this:
struct C<double>
{
enum Inner { c };
template<Inner I, int dummy> struct Dispatcher;
template<int dummy> struct Dispatcher<c, dummy>
{ };
};
... and the template argument `c` here refers to the non-dependent enumeration
constant `C<double>::c`.
The rule governing whether the original template `C` is valid is
[temp.res.general]/6 (https://eel.is/c++draft/temp.res.general#6), and in
particular:
> no diagnostic shall be issued for a template for which a valid specialization
> can be generated
Because `C` has valid specializations, it's valid.