[Bug c++/80841] Fails to match template specialization with polymorphic non-type template argument
daniel.kruegler at googlemail dot com
gcc-bugzilla@gcc.gnu.org
Sat May 20 21:29:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80841
Daniel Krügler <daniel.kruegler at googlemail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |daniel.kruegler@googlemail.
| |com
--- Comment #1 from Daniel Krügler <daniel.kruegler at googlemail dot com> ---
(In reply to Jason Bell from comment #0)
An interesting case. Reduced example:
//#########################################
template <class T, T X>
struct A {};
template <class T, class U>
struct B {};
template <class T, T X>
struct B<T, A<T, X>>
{
using result = T;
};
static double input;
int main() {
using result1 = typename B<int, A<int, 15>>::result; // OK
using result2 = typename B<double*, A<double*, &input>>::result; // OK
using result3 = typename B<double&, A<double&, input>>::result; // Error
}
//#########################################
results in:
prog.cc: In function 'int main()':
prog.cc:18:59: error: 'result' in 'struct B<double&, A<double&, input> >' does
not name a type
using result3 = typename B<double&, A<double&, input>>::result;
^~~~~~
Clang behaves exactly the same and from the compiler behaviour it looks like a
non-deducible situation, but I fail to match this with current non-deduced
context rules at the moment.
More information about the Gcc-bugs
mailing list